LoginSignup
112
109

More than 3 years have passed since last update.

Bashショートカットキー

Last updated at Posted at 2018-07-11

概要

LinuxのデフォルトシェルBashのショートカットキーについて、便利なのでマニュアルを読み直して覚えておきたいものをまとめました。

動作環境

$ bash --version
GNU bash, version 4.4.23(1)-release (x86_64-unknown-linux-gnu)
...

マニュアルページ

インタラクティブシェルで使えるショートカットキーについてはBashのマニュアルページのREADLINEの箇所に記載してあります。man bashで参照できます。
本記事のタイトルは「ショートカットキー」としましたがマニュアルページでは「key bindings」という表現となってます。

ショートカットキー一覧

ショートカットキーはマニュアルページの記載に合わせて以下のように表現します。

  • Ctrlキーとの同時押しはC-xと表現します。
  • Altキー(Metaキー)との同時押しはM-xと表現します。

EscキーもMetaキーとして使用できます。この場合、同時押しでなくてもショートカットキーとして使用できます。(例: Alt + fEsc, fが同じ動作をする。)

key コマンド名 説明
# カーソル移動 ★★★
C-a beginning-of-line 行頭へ移動
C-e end-of-line 行末へ移動
C-f forward-char 1文字進む
C-b backward-char 1文字戻る
M-f forward-word 1単語進む
M-b backward-word 1単語戻る
C-l clear-screen 現在行を残して画面をクリアする。
人に説明するときは多用すると見やすいです。
# 履歴操作
C-p previous-history 1つ前に実行したコマンドを挿入する。
C-r reverse-search-history コメンド履歴を検索※インクリメンタルサーチ
※入力練習のためにはあまり使わないほうがいいかも
M-p non-incremental-reverse-search-history コマンド履歴を検索
M-. yank-last-arg 直前のコマンドの引数を入力
# テキスト処理
C-d end-of-file EOF(End Of File, ファイルの終端)を入力する。
※コマンドラインに何も入力していない状態でやるとターミナルが終了する。
C-d delete-char コマンドラインに文字列を入力途中の場合、1文字削除する。Deleteキーと同じ。
C-v TAB tab-insert タブを挿入。
Terminalでもタブを挿入できる。使い道はない。
C-t transpose-chars カーソル前後の文字を入れ替える。カーソルが行末にある場合、最後の2文字を入れ替える。
M-u upcase-word 単語を大文字にする。
M-l downcase-word 単語を小文字にする。
# コピーペースト
C-k kill-line 行末まで削除
C-u unix-line-discard 行頭まで削除
M-d kill-word 次の単語削除(単語の最後まで削除)
M-Rubout backward-kill-word 前の単語削除(単語の最初まで削除)
C-w unix-word-rubout 前の単語削除(スペースで区切られているものを単語とする)
# 他
C-_ undo やり直す
C-] character-search 続けて入力する文字までカーソルを移動する
例) 「$ cat hoge fuga」の行頭にカーソルがあるとして、`Ctrl + ], g`を押すと「fuga」のgにカーソルが移動する。
M-C-] character-search-backward 上記「character-serarch」の逆(反対方向へ文字検索)

補足

end-of-file (C-d)

ファイル終端を挿入するということは、もうそれ以上プログラムに渡すデータがないことを示します。
例)
catコマンドはファイルの内容を出力するコマンドです。
引数にファイルを指定しなかった場合は、プログラムは標準入力から延々入力を受け付けます。
Ctrl + dでEOF(ファイル終端)が入力されると正常終了します。
イメージとして、下の例では、^#を入力してEnterを押した後にCtrl + dでEOFを渡して入力を終了しています。

$ cat > regex # 標準入力をregexというファイルにリダイレクトする
self-insert
^#
$ 

単語

単語の単位で移動したり削除したりするショートカットキーがありますが、大体は連続した英数字(alphanumeric)を単語とします。記号は無視されます。全角ひらがなは単語として扱われましたがそんな使い方する人はいないでしょう。
例えば以下の入力の行末にカーソルがあり、Alt + BackSpaceを押していくと以下のようになります。

$ [ -a hoge ] && echo 'true' || echo 'false'
$ [ -a hoge ] && echo 'true' || echo '
$ [ -a hoge ] && echo 'true' || 
$ [ -a hoge ] && echo '
$ [ -a hoge ] && 
$ ...

Ctrl + wも同じく前の単語を削除しますが、スペース単位で消します。
上に挙げたコマンドではこれだけ例外です。

$ [ -a hoge ] && echo 'true' || echo 'false'
$ [ -a hoge ] && echo 'true' || echo 
$ [ -a hoge ] && echo 'true' || 
$ [ -a hoge ] && echo 'true' 
$ [ -a hoge ] && echo 
$ ...

おまけ

Ctrlキーが押しにくい

キーバインドをカスタマイズしてCaps Lockに割り当てる人が多いようです。
日本のキーボードは無変換変換がある分、手前のキーが多いので、わざわざ日本語キーボードを買って修飾キーを全部親指で押せるようにカスタマイズしている海外の人もいるそうです。

Linuxの場合、xkbの設定(setxkbmapとか)やxmodmapなどで実現できます。
Windowsはアプリを入れたくなければレジストリエディタで設定できます。

日本人で無変換変換を使わない人は修飾キーを割り当てたり、片方に日本語ON、片方に日本語OFFを割り当てるといいと思います。

キーバインドを確認する。

bind -pで設定されているキーバインドが一覧で表示されます。
効かない場合は確認してみてください。
\CCtrlキー、\eEscキー(Metaキー)のことです。

$ bind -p > bindp
$ grep -E '^"\\[CeM]' bindp
"\C-g": abort
"\C-x\C-g": abort
"\e\C-g": abort
"\C-j": accept-line
"\C-m": accept-line
"\C-b": backward-char
"\eOD": backward-char
"\e[D": backward-char
"\C-h": backward-delete-char
(省略)
"\C-x\C-u": undo
"\C-_": undo
"\C-u": unix-line-discard
"\C-w": unix-word-rubout
"\eu": upcase-word
"\C-y": yank
"\e.": yank-last-arg
"\e_": yank-last-arg
"\e\C-y": yank-nth-arg
"\ey": yank-pop

普段使わないだろうというのもたくさんあります。
Esc, O, Dで「一文字戻る」、など。

ターミナルエミュレータの設定

シェルを使うためのソフトウェア・アプリケーションによってはツールバーのショートカットキーが優先されてしまうことがあります。
1単語進めようとしてAlt + fを入力したら、ツールバーのファイルタブが開いてしまうなど。
シェルを使うことを前提にしているのであれば、ツールバーを非表示にするか、エミュレータのショートカットキーを無効にする設定が必ずあります。

112
109
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
112
109