2016/04/20 13:56:50

bashのキーバインドを覚えて快適コマンドライン生活

目次(クリックするとジャンプします)
  • 1:コマンドラインを自由に飛びたいな
  • 2:キーバインド集
  • 2.1:移動系キーバインド
  • 2.2:編集系キーバインド
  • 2.3:コマンド履歴系キーバインド
  • 2.4:補完系キーバインド
  • 3:キーバインドを確認する
  • 4:まとめ

コマンドラインを自由に飛びたいな

Linuxに環境を移行してCLIで作業することがほとんどになりました。コマンドもたくさん打ち込みます。

コマンドラインでのコマンド編集の手間もなかなかバカにできません。なんとか効率よくコマンドを打ち込みたいものです。

そこでbashreadlineの連携キーバインドですよ。コマンドライン入力を効率良く行うことができるようになります。

readlineはGNU謹製の便利ライブラリで、コマンドラインの入力をさまざまに操作してくれます。例えば行頭に移動する、カーソル以降を全部削除、単語ごとの移動などはreadlineが提供してくれる機能となります。

bashではこのreadlineの各種コマンドをキーバインドしてあり、手軽に使うことができるようになっています。

キーバインド集

今回はコマンドラインの編集に的を絞ってまとめてみました。

移動系キーバインド

おそらくいちばん使うことになるキーバインドです。コマンドラインを自由自在に飛び交いましょう。

キーバインド 意味 同じキー readlineのコマンド名
ctrl + a 行頭に移動 homeキー beginning-of-line
ctrl + b 1文字左へ カーソル左キー backward-char
ctrl + e 行末に移動 endキー end-of-line
ctrl + f 1文字右へ カーソル右キー forward-char
ctrl + ] 文字を 1 つ読み込み、 その文字が次に現われる場所に移動 character-search
alt(esc) + ctrl + ] 文字を 1 つ読み込み、 その文字が次に現われる場所に移動 character-search-backward
alt(esc) + b 前の単語の先頭に移動 backward-word
alt(esc) + f 次の単語の末尾(空白部分)に移動 forward-word

編集系キーバインド

便利な機能がてんこ盛りです。これらの編集系キーバインドを覚えたらコマンドラインを征服できるかもしれません。

キーバインド 意味 同じキー readlineのコマンド名
ctrl + d カーソル右の文字を削除 deleteキー delete-char
ctrl + h カーソル左の文字を削除 backspaceキー backward-delete-char
ctrl + k カーソルより右の文字をすべて削除(キルリングに格納) kill-line
ctrl + l 画面クリア clear-screen
ctrl + u カーソルより左の文字をすべて削除(キルリングに格納) unix-line-discard
ctrl + y 削除した単語(キルリングの先頭)をヤンク(貼り付け) yank
ctrl + y キルリングを移動し先頭になったテキストをヤンク yank-pop
ctrl + t 文字の前後入れ替え transpose-chars
alt(esc) + t 単語の前後入れ替え transpose-words
alt(esc) + u カーソル位置の(または後ろの)単語を大文字にする upcase-word
alt(esc) + l カーソル位置の(または後ろの)単語を小文字にする downcase-word
alt(esc) + l カーソル位置の(または後ろの)単語の先頭文字を大文字にする(キャピタライズ) capitalize-word
ctrl + w カーソルより前の1単語(空白区切り)を削除 unix-word-rubout
alt(esc)+ ctrl + h カーソル左の1単語文字を削除 backward-kill-word
alt(esc) + d カーソル右の1単語文字を削除 kill-word
alt(esc) + tab 周囲の空白とタブを全て削除 delete-horizontal-space
alt(esc) + 0 ~ 数字 すでに入力された引数に数字追加する、M–でマイナス値 digit-argument

コマンド履歴系キーバインド

なんども同じコマンドは打ちたくない!!

キーバインド 意味 同じキー readlineのコマンド名
ctrl + n 次のコマンド履歴 カーソル下キーと同じ next-history
ctrl + p 前のコマンド履歴 カーソル上キーと同じ previous-history
ctrl + r コマンド履歴を入力した文字から後ろにインクリメント検索する reverse-search-history
ctrl + s コマンド履歴を入力した文字から前にインクリメント検索する forward-search-history
alt(esc) + p コマンド履歴を入力した文字から後ろに非インクリメント検索する non-incremental-reverse-search-history
alt(esc) + n コマンド履歴を入力した文字から前に非インクリメント検索する non-incremental-forward-search-history

補完系キーバインド

めんどくさい!!補完できるものは補完してしまえ!!

キーバインド 意味 同じキー readlineのコマンド名
tab 入力された文字の補完 complete
alt(esc) + ctrl + y 前のコマンドの引数をカーソル位置に挿入 yank-nth-arg
alt(esc) + ctrl + e 行の展開を行う shell-expand-line
alt(esc) + ctrl + ^ 履歴の展開を行う shell-expand-line
alt(esc) + ! 直前のテキストの補完候補を列挙(コマンドとして) complete-command
alt(esc) + ? 直前のテキストの補完候補を列挙 possible-completions
alt(esc) + / ファイル名補完 complete-filename
alt(esc) + @ ホスト名補完 complete-hostname
alt(esc) + ~ ユーザ名補完 complete-username
alt(esc) + $ シェル変数補完 complete-variable
alt(esc) + tab 履歴リストに対して比較しマッチしたものが補完候補になる dynamic-complete-history
alt(esc) + { ブレーズでくくられたファイル名補完 dynamic-complete-history
alt(esc) + . 前のコマンドの引数を挿入(押すたびに遡る) yank-last-arg
alt(esc) + * 補完対象を引数に挿入 insert-completions
ctrl + x * globを展開する glob-expand-word
alt(esc) + x * globを展開する 行の再描画 glob-list-expansions
alt(esc) + < コマンド履歴の先頭に移動 beginning-of-history
alt(esc) + > コマンド履歴の最後に移動 end-of-history

キーバインドを確認する

キーバインドは

bind -p

で確認することができます。大量のキーバインドが表示されると思いますが、デフォルトでバインドされているのはreadlineコマンドの一部です。以下は@MINOの環境での出力です(一部抜粋)

一度確認してみることをオススメします。

"\C-g": abort
"\el": downcase-word
"\e\C-i": dynamic-complete-history
"\C-x\C-e": edit-and-execute-command
"\C-x)": end-kbd-macro
"\e>": end-of-history
"\C-e": end-of-line
"\C-x\C-x": exchange-point-and-mark
"\C-f": forward-char
"\eOC": forward-char
"\e[C": forward-char
"\C-s": forward-search-history
"\e\e[C": forward-word
"\e[1;5C": forward-word
"\e[5C": forward-word
"\ef": forward-word
"\eg": glob-complete-word
"\C-x*": glob-expand-word
"\C-xg": glob-list-expansions
"\e^": history-expand-line
"\e#": insert-comment
"\e*": insert-completions
"\e.": insert-last-argument
"\e_": insert-last-argument
"\C-k": kill-line
"\ed": kill-word
"\C-n": next-history
"\eOB": next-history
"\e[B": next-history
"\en": non-incremental-forward-search-history

まとめ

  • bashreadlineと連携し、コマンドラインで便利機能を提供している
  • 主にctrlキー系で割り当てられており、移動、編集、補完に威力を発揮する。
  • bind -pキーバインドを確認できる