コマンドラインを自由に飛びたいな
Linuxに環境を移行してCLIで作業することがほとんどになりました。コマンドもたくさん打ち込みます。
コマンドラインでのコマンド編集の手間もなかなかバカにできません。なんとか効率よくコマンドを打ち込みたいものです。
そこでbash
とreadline
の連携キーバインドですよ。コマンドライン入力を効率良く行うことができるようになります。
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
まとめ
bash
はreadline
と連携し、コマンドラインで便利機能を提供している- 主にctrlキー系で割り当てられており、移動、編集、補完に威力を発揮する。
bind -p
キーバインドを確認できる