Viper-modeコマンドプレフィックスキーは、2セットの間接参照によって設定されます。すべてのコマンドキーがにバインドされているので、最初のものを見つけました'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削除コマンドのように機能させたい場合は、次の2つが必要になります。
(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バインディングは期待どおりに機能します。(または、と同じ方法で追加することもできます-これも機能します)。そのソースを提供しますが、100行の長さであり、ここに含める価値はありません(4文字の変更です)。を実行すると、ソースにアクセスできます。?t
?c
M-x find-function viper-prefix-arg-com
簡単に言うと、viperのキーを大規模に再バインドする場合は、かなりの作業量になり、viperのソースコードに慣れることができます。
コード化された方法を見ると、'viper-prefix-arg-com
再定義せずに必要な変更を加えることはできません。viper-modeが実装するviコマンドには、おそらく3つまたは4つの異なるタイプがあります(これは'コマンド引数です)。他のものは、うまくいけば、再バインドするのがより簡単です...