vim に改宗してから大分経つんですが、bash (というかreadline) の viモードを使ってないことに気づいたので使ってみることにしました。
まだ慣れませんが、慣れれば強そうです
設定
今のところ .inputrc はこんな感じ。
$if bash
set editing-mode vi
set keyseq-timeout 5
set show-mode-in-prompt on
set vi-cmd-mode-string "\1\e[36m\2cmd\1\e[0m\2 "
set vi-ins-mode-string "\1\e[32m\2ins\1\e[0m\2 "
set keymap vi-command
"v": ""
"\ev": edit-and-execute-command
"\C-p": history-search-backward
"\C-n": history-search-forward
set keymap vi-insert
"\ev": edit-and-execute-command
"\C-l": clear-screen
"\C-p": history-search-backward
"\C-n": history-search-forward
$endif
最近はなるべくデフォルトで使う方向なんですが、しばらく使ってみてどうしても辛かったキーだけ設定しました。
$if bash
# ...
$endif
とりあえず bash のみで有効になるようにしてます。
set keyseq-timeout 5
esc押してからコマンドモードに切り替わるまでのラグをなくすために設定してます。
曖昧なショートカット入力時のタイムアウト用らしいので、ショートカットの設定によっては問題がでるやもしれません。
screen や tmux を使う場合でも同じような設定があります。
screen が maptimeout
で tmux は多分 escape-time
(未確認)
set show-mode-in-prompt on
set vi-cmd-mode-string "\1\e[36m\2cmd\1\e[0m\2 "
set vi-ins-mode-string "\1\e[32m\2ins\1\e[0m\2 "
プロンプトの前にモードを表示するようにします。
エスケープシーケンスで色をつけたりできますが、プリンタブルじゃない文字は \1
と \2
で囲む必要があります。囲まなくて一見普通に動作しますが、 C-u
で消したりしたときなどカーソル位置がおかしくなって不幸になります。
"v": ""
"\ev": edit-and-execute-command
デフォルトだと v キーは コマンドをエディタで編集し実行なんですが、暴発しまくったので Alt-v に割り当てました。
"\C-p": history-search-backward
"\C-n": history-search-forward
"\C-l": clear-screen
C-p / C-n / C-l はよく使ってたのでなくなるのが耐えられませんでした。