LoginSignup
0
0

More than 3 years have passed since last update.

libeditで頑張る〜GNUのreadlineっぽくキーバインドを設定する〜

Posted at

この記事は、上智大学エレクトロニクス研究部Advent Calendar第16日目の記事です。

はじめに

この記事はキーバインドがイマイチな libedit をカスタマイズする方法について解説します。
そもそも libedit とは何なのかわからないという方は同じくラインエディタである readline についての解説記事 を参照してください。

libedit のキーバインドがイマイチな話

標準の設定のままだと、以下の問題が発生します。

^ + R でインクリメンタルサーチができない

割と使うインクリメンタルサーチ、しかし、 libedit ではショートカットキーが設定されていないため標準のままだとインクリメンタルサーチが使えません。キーバインドを設定するだけで使えるなら標準状態でサポートしてもいいはずなのに不思議ですね。

^ + U が行の文字をすべて削除になっている

これが地味に困ります。途中までカーソルをあわせてそれよりも前の文字を消したかっただけのはずなのに、すべての文字が消されてしまいます。

⌥ opt + が使えない

カーソル移動を早くしたいとき、このショートカットキーは割と便利です。しかし、標準設定ではサポートされていないので、 [D[C と出力されるだけです。これも別の機能の被っているわけではないのに標準で設定されていません。

どんなとき困るのか

libedit がどんなところで使われているかという話をします。 MySQLクライアントの mysql コマンド、 XCode Command Toolsに同梱されている python3 コマンドなどがあります。python3は別のインストール方法があるので回避できますが、MySQLは使用頻度が高いため回避しにくいです。特にSQLでは複雑なコマンドを打つ機会が多く、昔のコマンドを使いまわしたいのにインクリメンタルサーチができないというのは痛いです。

~/.editrc の中身

上記の問題をすべて解決するにはキーバインドの設定を変える必要があります。ホームディレクトリ直下に .editrc というファイルを作り、以下の内容を書き込めば設定完了です!

bind "^A" ed-move-to-beg
bind "^B" ed-prev-char
bind "^C" ed-tty-sigint
bind "^D" em-delete-or-list
bind "^E" ed-move-to-end
bind "^F" ed-next-char
bind "^I" rl_complete
bind "^K" ed-kill-line
bind "^L" ed-clear-screen
bind "^N" ed-search-next-history
bind "^O" ed-tty-flush-output
bind "^P" ed-search-prev-history
bind "^R" em-inc-search-prev
bind "^S" em-inc-search-next
bind "^T" ed-transpose-chars
bind "^U" vi-kill-line-prev
bind "^W" ed-delete-prev-word
bind "^X" ed-sequence-lead-in
bind "^Y" em-yank

bind "\e[1;5C" em-next-word
bind "\e[5C" em-next-word
bind "\e\e[C" em-next-word

bind "\e[1;5D" ed-prev-word
bind "\e[5D" ed-prev-word
bind "\e\e[D" ed-prev-word

おまけ

おまけに readline をカスタマイズする ~/.inputrc を晒しておきます。⌥ opt + ⌥ opt + で単語飛ばしでカーソル移動ができます。

"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
0
0
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
0
0