Emacs define-key, привязка клавиш в режиме Viper
Я пытаюсь изучить emacs, получая пользовательские привязки клавиш vi.
Используя Viper-режим, как правильно связать ключ? (Я использую раскладку клавиатуры Colemak(вместо 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]
Я не уверен, доступен ли 'define-key' в моей версии emacs?
Это работает, но не в режиме viper
(global-set-key "n" "j")
Любая помощь приветствуется. Это мой первый день, когда я использую Emacs, и мне трудно заставить Colemak & Viper-mode работать должным образом.
Спасибо за любую помощь...
2 ответа
Надеюсь, некоторые полезные ответы здесь:
Во-первых, имея эту линию в .viper
работает для меня. Обратите внимание, что viper-vi-global-user-map
применяется, когда вы находитесь в командном режиме, а не в режиме вставки.
Во-вторых, define-key
это не команда, это обычная функция, которая просто означает, что ее нельзя вызвать с помощью Mx. Посмотрите эту вики-страницу Emacs, чтобы узнать немного больше об этом различии. Но это была хорошая попытка.
В-третьих global-set-key
это команда, вы могли бы попытаться внести изменения, используя Mx global-set-key. Но это устанавливает ключ в текущей глобальной карте, которая не совпадает с viper-vi-global-user-map
, В режиме Viper используется множество различных комбинаций клавиш, чтобы Emacs вел себя как vi, но все карты накладываются поверх глобальной карты.
Я предполагаю, что вы обнаружили, что Cv не был связан, как вы хотите, когда вы находитесь в режиме вставки. И это можно решить, добавив это к вашему .viper
:
(define-key viper-insert-global-user-map "\C-v" 'scroll-down)
И, наконец, scroll-down
может быть не то, что вы хотите. down
относится к тексту, перемещающемуся вниз (учитывая перспективу фиксированного окна). Cv обычно связан с 'scroll-up
, Но, может быть, это именно то, что вы хотите.
Предостережение: я не пользователь режима viper, я даже не знаю, как использовать vi. Так что моя терминология может быть отключена. Но я считаю, что задача изменить вещи в режиме viper очень интересна.
Отредактировано, чтобы добавить
Из вашего комментария звучит так, будто вы хотите, чтобы n было таким же, как то, с чем j связан по умолчанию. Попробуйте добавить это:
(define-key viper-vi-global-user-map "n" 'viper-next-line)
В "нормальном" режиме я сделал Mx описать ключ j, который сказал мне, что j связан с 'viper-next-line
и вышеприведенная строка свяжет n с той же самой программой. Повторите эти действия для остальных привязок, которые вы хотите переместить.
В наше время evil-mode - это слой эмуляции vim для emacs, и для его настройки для colemak мой пакет https://github.com/wbolster/evil-colemak-basics помогает.