Как я могу переназначить префиксные клавиши 'c', 'd' и т. Д. В Emacs viper-mode - PullRequest
4 голосов
/ 27 января 2010

Я использую раскладку клавиатуры Colemak и хочу попробовать раскладку Vim с здесь с Vimpulse. Тем не менее, компоновка переназначает префикс команд клавиш Vim 'c' и 'd' среди других, и эти клавиши, кажется, не могут быть легко переназначены с помощью стандартной команды переназначения клавиш Viper. Все они сопоставлены с «аргументом-командой viper» в таблице ключей viper, а действительные функции клавиш, похоже, определены в других местах источника Viper.

Есть ли более простой способ привязать префиксные команды к другим ключам, чем разветвление моей локальной копии исходного кода Viper и переопределение значений магического префиксного ключа внутри него?

Ответы [ 2 ]

2 голосов
/ 27 января 2010

Клавиши префиксов команд в режиме 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)

Итак, если вы хотите, чтобы ключ t действовал как команда удаления, вам понадобятся следующие две вещи:

(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 символов). Вы можете добраться до источника, выполнив M-x find-function viper-prefix-arg-com .

Короче говоря, если вы хотите перепродать ключи для viper по оптовым ценам, это будет изрядная работа, и вы намного лучше познакомитесь с исходным кодом viper.

Глядя на то, как кодируется 'viper-prefix-arg-com, вы не можете внести желаемое изменение, не изменив его. Вероятно, есть 3 или 4 других различных типа команд vi, которые реализует режим viper (эта команда является аргументом команды). Остальные, надеюсь, более просты для повторного связывания ...

1 голос
/ 19 декабря 2011

Похоже, Evil-mode поддерживает переназначение даже клавиш префиксов команд. Я буду использовать это вместо этого.

...