Клавиши префиксов команд в режиме 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 (эта команда является аргументом команды). Остальные, надеюсь, более просты для повторного связывания ...