Ключ определения Emacs, привязка клавиш режима Viper

Я пытаюсь изучить emacs, получая пользовательские привязки клавиш vi.

Как правильно переназначить ключ, используя Viper-mode? (Я использую раскладку клавиатуры Colemak (вместо qwerty), поэтому мне нужно изменить такие вещи, как n->j) Но было бы нравится работать в viper-mode.

Из этого руководства по связыванию клавиш на GNU.org: http://www.gnu.org/software/emacs/manual/html_node/viper/Key-Bindings.html

В нем говорится, что команда для добавления в ваш файл .viper:

(define-key viper-vi-global-user-map "\C-v" 'scroll-down)

У меня это не работает... на самом деле я даже не уверен, что у меня есть функция "определить ключ"...

M-x define-key [No match]

Я не уверен, доступен ли ключ определения в моей версии emacs?

Это работает, но не в режиме вайпера

(global-set-key "n" "j")

Любая помощь приветствуется. Это мой первый день, когда я использую Emacs, и мне сложно заставить Colemak и Viper-mode работать должным образом.

Спасибо за любую помощь...


person Quang Van    schedule 28.10.2010    source источник


Ответы (2)


Надеюсь, некоторые полезные ответы здесь:

Во-первых, наличие этой строки в .viper работает на меня. Обратите внимание, что viper-vi-global-user-map применяется, когда вы находитесь в командном режиме, а не в режиме вставки.

Во-вторых, define-key — это не команда, это обычная функция, что просто означает, что ее нельзя вызывать с помощью M-x. См. эту вики-страницу Emacs, чтобы узнать подробнее об этом различии. Но это была хорошая попытка.

В-третьих, global-set-key является командой, вы могли попробовать внести изменения с помощью M-x global-set-key. Но это устанавливает ключ в текущей глобальной карте., что не совпадает с viper-vi-global-user-map. Viper-mode использует множество различных раскладок, чтобы Emacs вел себя как vi, но все раскладки накладываются поверх глобальной карты.

Я предполагаю, что вы обнаружили, что C-v не был связан так, как вам хотелось бы, когда вы находитесь в режиме insert. И это можно решить, добавив это к вашему .viper:

(define-key viper-insert-global-user-map "\C-v" 'scroll-down)

Наконец, scroll-down может быть не тем, что вам нужно. down относится к тексту, движущемуся вниз (учитывая перспективу фиксированного окна). C-v обычно привязан к 'scroll-up. Но, может быть, это именно то, что вы хотите.

Предостережение: я не использую viper-режим, я даже не знаю, как использовать vi. Так что моя терминология может быть неправильной. Но я нахожу задачу изменения вещей в режиме гадюки очень интересной.

Отредактировано для добавления

Судя по вашему комментарию, вы хотите, чтобы n совпадало с тем, к чему по умолчанию привязан j. Попробуйте добавить это:

(define-key viper-vi-global-user-map "n" 'viper-next-line)

В «нормальном» режиме я сделал Mx description-key j, который сказал мне, что j связан с 'viper-next-line, а приведенная выше строка свяжет n к той же рутине. Повторите для остальных креплений, которые вы хотите переместить.

person Trey Jackson    schedule 28.10.2010
comment
Привет, Трей, спасибо за подробный ответ. :) Когда вы сказали командный режим, вы имеете в виду противоположность режиму вставки? Vim называет это нормальным режимом. На самом деле я хотел, чтобы он работал в обычном режиме (режим движения)? - person Quang Van; 29.10.2010
comment
У меня должен был быть более реалистичный пример «определить ключ», на самом деле я хотел превратить n в j в обычном режиме/режиме движения. Но оставьте n как n в режиме вставки. (Это связано с тем, что j, а также h,k,l являются частью элементов управления движением VIM, которые должны быть преобразованы в эквивалент n,h,e,i Colemak) - person Quang Van; 29.10.2010
comment
@Quang смотрите последнее дополнение. - person Trey Jackson; 29.10.2010
comment
Потрясающий! Спасибо. Работает как положено. :) Потенциальный переход с vim на Emacs пугает. Я обязательно обновлю базовые сочетания клавиш о том, как заставить emacs работать с viper+colemak, для всех, кто заинтересован. Еще раз спасибо, Трей. - person Quang Van; 29.10.2010

в наше время evil-mode — это уровень эмуляции vim для emacs, и чтобы настроить его для colemak, мой https://github.com/wbolster/evil-colemak-basics очень помогает.

person wouter bolsterlee    schedule 20.10.2016