Как я могу переназначить префиксные клавиши 'c', 'd' и т. Д. В Emacs viper-mode
Я использую раскладку клавиатуры Colemak и хочу попробовать раскладку Vim отсюда с Vimpulse. Тем не менее, компоновка переназначает префикс команд клавиш Vim 'c' и 'd' среди других, и эти клавиши, кажется, не могут быть легко переназначены с помощью стандартной команды переназначения клавиш Viper. Все они сопоставлены с "аргументом команды viper" в таблице ключей viper, и реальные функции клавиш, похоже, определены в другом месте источника Viper.
Есть ли более простой способ привязать префиксные команды к другим ключам, чем разветвление моей локальной копии исходного кода Viper и переопределение значений магического префиксного ключа внутри него?
2 ответа
Похоже, что Evil-mode поддерживает переназначение даже префиксных клавиш команды. Я буду использовать это вместо
Клавиши префиксов команд в режиме Viper устанавливаются через два набора косвенных указаний. Вы нашли первое, так как все командные клавиши связаны с 'viper-command-argument
, Следующее, что сделано, это поиск в переменной viper-exec-array
, В настоящее время установлено так:
(aset viper-exec-array ?c 'viper-exec-change)
(aset viper-exec-array ?C 'viper-exec-Change)
(aset viper-exec-array ?d 'viper-exec-delete)
(aset viper-exec-array ?D 'viper-exec-Delete)
(aset viper-exec-array ?y 'viper-exec-yank)
(aset viper-exec-array ?Y 'viper-exec-Yank)
(aset viper-exec-array ?r 'viper-exec-dummy)
(aset viper-exec-array ?! 'viper-exec-bang)
(aset viper-exec-array ?< 'viper-exec-shift)
(aset viper-exec-array ?> 'viper-exec-shift)
(aset viper-exec-array ?= 'viper-exec-equals)
Итак, если вы хотите, чтобы ключ действовал как команда удаления, вам потребуются следующие две вещи:
(aset viper-exec-array ?t 'viper-exec-delete)
(define-key viper-vi-basic-map "t" 'viper-command-argument)
(И, по-видимому, вы бы переместили движение от t куда-нибудь, произнесите клавишу c с помощью:
(define-key viper-vi-basic-map "c" 'viper-goto-char-forward)
Наконец, вы должны изменить процедуру 'viper-prefix-arg-com
что я не претендую на полное понимание. При этом, если вы замените все ?c
с ?t
, тогда привязка t работает как положено. (В качестве альтернативы, вы можете добавить ?t
так же, как ?c
используется - это тоже работает). Я бы предоставил источник для этого, но он длиной в 100 строк, и не стоит упоминать здесь (это изменение из 4 символов). Вы можете добраться до источника, выполнив Mx find-function viper-prefix-arg-com.
Короче говоря, если вы хотите сделать переподключение ключей для viper полностью, это будет изрядная работа, и вы намного лучше познакомитесь с исходным кодом viper.
Смотря на путь 'viper-prefix-arg-com
закодировано, вы не можете внести желаемое изменение, не переопределив его. Вероятно, есть 3 или 4 других различных типа команд vi, которые реализует режим viper (эта команда является аргументом команды). Остальные, надеюсь, более просты, чтобы восстановить...