10
8

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 のbind -x を使わないのももったいないだろう!

Posted at

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

設定方法

~/.bashrcbind -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 の履歴検索を上書きする

なお、バッククオート「`」 は、キーボード端の押しやすい場所にある割に使用機会が少ない(コマンド置換は $(...) で代替可能)ので、オススメです。

  1. なお「変態だ」とか「zshつかえよ」と言われる可能性もありますが、ご了承ください。

10
8
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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?