Bash のbind -x を使わないのももったいないだろう!
iTerm2のHotkeyを使わないなんてもったいない!!
で、iTerm2 のキーバイドが紹介されていますが、
Bashのキーバインドを変更している人も案外少なそうなので、紹介します。
使うのは、bind -x
bind -x keyseq:shell-command
keyseq が押されるたびに、 shell-command が実行されるようにします。
Man page of BASH
bind -x を設定するメリット
早い!
コマンドを入力したり、historyから検索しなくても、1キーで処理を実行できます。
標準のショートカットキーより便利!
Bash標準のショートカットキーも上書きできます。
例えば、Ctrl-Rのコマンド履歴検索はだいぶ貧弱ですが、
これを fzf や peco を使った自作のに差し替えられます。
カスタマイズ可能!
bind -x
は単にコマンドを実行するだけですから、コマンドは自分でスクリプトを書いたり、Bash以外の言語で書いたり、自由にカスタマイズできます。
かっこいい?
ペアプロで、後輩に自分のマシンを操作させているときに
「あれ?なんか、変な画面に切り替わっちゃいました」
「俺のBashは、バッククオートに fzf を割り当てているんだよ」
って言えると、先輩すごーい!と言ってもらえる・・・かも1。
設定方法
~/.bashrc
で bind -x
を実行するだけでOK。
# ~/.bashrc
_find_and_edit() {
# fzf でファイルを検索して Visual Studio Code で開く
fzf | xargs code
}
bind -x '"`": _find_and_edit' # バッククオート「`」 に割り当てる
_replace_by_history() {
# fzf を使った、コマンド履歴検索
local l
l=$(HISTTIMEFORMAT='' history | sort -k1,1nr | sed -e 's/^[[:space:]]*[0-9]\+[[:space:]]*//' | uniq-everseen | fzf --query "$READLINE_LINE")
READLINE_LINE="$l"
READLINE_POINT=${#l}
}
bind -x '"\C-r": _replace_by_history' # Ctrl-R の履歴検索を上書きする
なお、バッククオート「`」 は、キーボード端の押しやすい場所にある割に使用機会が少ない(コマンド置換は $(...)
で代替可能)ので、オススメです。
-
なお「変態だ」とか「zshつかえよ」と言われる可能性もありますが、ご了承ください。 ↩