9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bash を viモードで使うことにした

Last updated at Posted at 2019-02-18

vim に改宗してから大分経つんですが、bash (というかreadline) の viモードを使ってないことに気づいたので使ってみることにしました。

まだ慣れませんが、慣れれば強そうです:thinking:

設定

今のところ .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 はよく使ってたのでなくなるのが耐えられませんでした。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?