readlineがかなり便利

最近になってreadlineをよく使うようになって、その便利さを思い知ったのでメモ。

readlineとは

bushなどのシェルのCUIにおける入力支援ライブラリ。
  特定のキーで「行頭移動」とか「行末移動」とかができる。
  よく使うのは下記のものとかで、

<C-A> -> 行頭へ移動
<C-E> -> 行末へ移動
<C-K> -> 行末まで削除

なんかはすごく便利。
  たとえば、

$ cd $HOME/local/src/sample.txt

と長いコマンドを打ったけれど、よく考えればファイルだからcdじゃなくて、viだったというとき。
  今までなら左キーでガガーっと移動して、cdをviに変えていたりしたわけですが、このreadlineならで一気に行頭へ移動。
  全てコマンドを消したいときもでコマンドを全て消せたりする。

その他のキー

上の3つは良く使うんですが、他にもいろいろあります。
  下記コマンドで見れます。

$ bindkey
Standard key bindings
"^@"           ->  set-mark-command
"^A"           ->  beginning-of-line
"^B"           ->  backward-char
"^C"           ->  tty-sigintr
"^D"           ->  delete-char-or-list-or-eof
"^E"           ->  end-of-line
"^F"           ->  forward-char
"^G"           ->  is undefined
"^H"           ->  backward-delete-char
....

ちなみに、これらはEmacsキーバインドです。
  僕はVi派なので、打ちにくかったりするのですが、まあこれくらいの量なら覚えられるのでEmacsバインドのまま使ってます。
  どうしてもViバインドにしたい、という方は

$ bindkey -v

で、viバインドになります。
  ただし、最初にを押さないといけないし、Emacsバインドと被ったりして非常に使いにくかったです。。。

キーの割り当て

Emacsバインドで我慢するとはいえ、ちょっと打ちにくすぎやろ、ってのは新たにキーマッピングしてやればいいようです。

$ bindkey ^P history-search-forward

これで、Viの後方補完ができます。
  .cshrcに書いておけば、オッケー。

補足

bashであれば、.inputrcにいろいろ書けばreadlineの設定ができるようですが、cshの場合はどこでやればいいのか。。。
  FreeBSDには独自のeditlineというのがあるそうで、こちらも試してみたいな。