2010-10-28 9 views
2

Я пытаюсь изучить emacs, получая привязки ключей vi.Emacs define-key, привязка ключа Viper-mode

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

С этого ключевого связывания руководства по 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 работает нормально.

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

ответ

4

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

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

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

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

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

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

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

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

Edited добавить

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

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

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

+0

Эй, Трей, спасибо за подробный ответ. :) Когда вы сказали «командный режим», вы имеете в виду противоположность режима вставки? Vim называет этот нормальный режим. На самом деле я хотел, чтобы он работал в нормальном режиме (режим движения)? –

+0

Я должен был иметь более реалистичный пример «define-key», на самом деле я хотел превратить «n» в «j» в нормальном/режиме движения. Но сохраните «n» как «n» в режиме вставки. (Это связано с тем, что «j», а также «h, k, l» является частью элементов управления движением VIM, который должен быть превращен в «n, h, e, i» эквивалент Colemak) –

+0

@Quang см. Последнее дополнение. –