4

Colemakキーボードレイアウトを使用していますが、ここからVimpulseでVimレイアウトを試してみたいと思います。ただし、レイアウトはコマンドプレフィックスのVimキー「c」と「d」を再マップします。これらのキーは、標準のViperキー再マップコマンドでは簡単に再マップできないようです。それらはすべて、viperキーマップの「viper-command-argument」にマップされており、実際のキー関数は、Viperソースの他の場所で定義されているようです。

Viperソースのローカルコピーをフォークしてその中のマジックプレフィックスキー値を再定義するよりも、プレフィックスコマンドを他のキーに再バインドする簡単な方法はありますか?

4

2 に答える 2

2

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?ttバインディングは期待どおりに機能します。(または、と同じ方法で追加することもできます-これも機能します)。そのソースを提供しますが、100行の長さであり、ここに含める価値はありません(4文字の変更です)。を実行すると、ソースにアクセスできます。?t?cM-x find-function viper-prefix-arg-com

簡単に言うと、viperのキーを大規模に再バインドする場合は、かなりの作業量になり、viperのソースコードに慣れることができます。

コード化された方法を見ると、'viper-prefix-arg-com再定義せずに必要な変更を加えることはできません。viper-modeが実装するviコマンドには、おそらく3つまたは4つの異なるタイプがあります(これは'コマンド引数です)。他のものは、うまくいけば、再バインドするのがより簡単です...

于 2010-01-27T16:20:39.183 に答える
1

Evil-modeは、コマンドプレフィックスキーでも再マッピングをサポートしているようです。代わりにそれを使用します。

于 2011-12-19T19:47:41.757 に答える