私は2つの異なるアクションを例えばにマッピングしようとしています。 CtrlShifta そして Ctrla:
map <C-S-a> :echo "ctrl-shift-a received"<CR>
map <C-a> :echo "ctrl-a received"<CR>
しかし、2つのうちのいずれかを押したときに得られるのは、ステータス行の「ctrl-areceived」という出力だけです。どうやら、viは大文字の制御文字と小文字の制御文字の違いを見ていません。
これを変更する方法はありますか?
Xterm(X.Org 6.8.99)でvi(v7.4)を実行しています。
Viはキーコードを同じものと見なすため、これは端末の制限です。挿入モードに入ると、これを確認できます i、次に打つ Ctrlv viをモードにして、特殊文字のリテラル入力を期待し、次にヒットします。 CtrlShifta。 ^A
出力が表示されます。今シーケンスを行います Ctrlv、 Ctrla、そして再び^A
が表示されます。両方の入力シーケンスにより、viで同じキーコードが表示されます。
xterm
などの端末の場合は、これを変更できます。 gnome-terminal
Xリソース設定を無視します 次の方法がわかりません。
この SO質問 は同じトピックをカバーし、 この例 はこれが.Xresources
ファイル内の複数のキーのマッピングに使用されていることを示しています。例えば。:
XTerm*vt100.translations: #override \
Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\
Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")
これで、さまざまなキーシーケンスがviに登場します。 Ctrla 対。 CtrlShifta、 Ctrlb 対。 CtrlShiftb、 Ctrlf 対。 CtrlShiftf。
~/.vimrc
でそれらを異なる方法でマッピングできるようになりました。
map <ESC>[65;5u :echo "ctrl-shift-a received"<CR>
map <C-a> :echo "ctrl-a received"<CR>