なるべく覚えないbashのキー操作
ターミナル&bashでコマンドラインを編集する時、実にいろいろなキー操作がある。便利そうだからと、あれもこれも覚えようと欲張るのだけど、すぐに忘れてしまう...。もっと厳選して覚えておかなくては。自分にとって必要最小限のキー操作を探ってみた。
カーソル移動
- 行頭・行末・単語区切りの移動で、カーソルを素早く動かす。
- マウスカーソルで指定すれば、クリックした位置にジャンプする。
control-A・E | 行頭・行末へ移動 |
option-←・→ | 1単語ずつ移動 |
option-クリック | クリックした位置へ移動 |
削除
- 行頭・行末・スペース・単語区切りの削除によって、修正を楽にする。
control-U・K | 行頭・行末まで削除 |
control-W | 次のスペースまで削除(左方向のみ) |
esc、delete・D | 1単語ずつ削除(左・右方向) |
control-H・D(delete・fn-delete) | 1文字ずつ削除(左・右方向) |
-
-
- 凡例:esc、delete・D = escを押した後にdelete、またはescを押した後にDを押す。
- 凡例:control-U・K = controlを押しながらU、またはcontrolを押しながらKを押す。
-
操作を戻す
- 削除したテキストは、ペーストできる。
- 編集した内容は、確実に元に戻せる。
control-Y | 直前に削除したテキストをペーストする |
control-- (controlとマイナス) |
操作を1つ戻す(undo) |
esc、R | 操作を全て戻す |
-
-
- redoはないのだろうか?
-
コマンド履歴
↑・↓ | コマンド履歴を遡る・進む |
esc、shift-<・> | コマンド履歴の先頭・末尾(古・新)へ移動 |
control-R、キーワード | コマンド履歴をキーワード検索 |
検索中にcontrol-R・S | キーワード検索を遡る・進む |
- control-Rに続けてキーワードを入力すると、コマンド履歴のキーワード検索が始まる。
- そして、検索中にcontrol-R・Sを押すと、キーワードを含む履歴だけを自在に行き来できる。
- 但し、以下の設定をしておく必要がある。
bashのcontrol-Sを有効にする
- デフォルトのターミナル環境では、二つのcontrol-Sが競合している。
- 端末のcontrol-S(画面出力を停止する)
- bashのcontrol-S(コマンド履歴を前方検索する)
- 優先されるのは「端末のcontrol-S」
- でも、ほとんど使うことはない...。
- 「bashのcontrol-S」が使えた方が、遥かに幸せになる。
そこで、端末のcontrol-Sを無効にする。すると、bashのcontrol-Sが有効になる!
- デフォルトでは、端末設定でstop=^Sとなっている。(^ = control)
$ stty -a speed 9600 baud; 40 rows; 270 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8 -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs -onocr -onlret cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol =; eol2 = ; erase = ^?; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
- それをundefに設定して、stop =
と反映されればOK。
$ stty stop undef $ stty -a speed 9600 baud; 40 rows; 270 columns; lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8 -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs -onocr -onlret cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol =; eol2 = ; erase = ^?; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ; susp = ^Z; time = 0; werase = ^W;
これで、bashのcontrol-Sが有効になった!
- 毎回stty stop undefを入力実行するのは面倒なので、~/.bashrcに追記しておくと、bash起動時に自動的に設定される。
...中略... # 端末の画面出力停止を無効にする # コマンド履歴の前方検索を有効にするため stty stop undef
optionキーを活用する
- ターミナル >> 環境設定 >> 設定 >>「メタキーとしてoptionキーを使用」を有効にしておくことで、escの代わりにoptionも使えるようになる。
- 以前同様、escも使える。
- optionを使うと、連続操作が快適になるのだ!
例:
- 「左方向に1単語ずつ削除する」操作を5回繰り返してみると...
-
- esc、deleteは、交互に10回押す必要がある。
esc、delete、esc、delete、esc、delete、esc、delete、esc、delete
-
- 一方、option-deleteなら、option押しながらdeleteのみ5回押しで済む!
option押しながら、delete、delete、delete、delete、delete
その他
esc、U・L・C | カーソルの右方向の1単語を大文字・小文字・先頭のみ大文字にする |
control-L | クリア(ターミナルのスクロールエリアの履歴は残る) |
command-K | クリア(ターミナルのスクロールエリアの履歴も削除) |
厳選
以上の操作と設定を、さらに厳選してみた。その基準は...
- 削除は左方向のみ。(但し、行末まで削除は含む)
- optionを使う。
- 独断と偏見。
設定
- ~/.bashrcに「stty stop undef」を追記する。
- ターミナル >> 環境設定 >> 設定 >>「メタキーとしてoptionキーを使用」を有効にしておく。
操作
No. | キー操作 | 動作 | 分類 |
---|---|---|---|
1 | control-A・E | 行頭・行末へ移動 | カーソル移動 |
2 | option-←・→ | 1単語ずつ移動 | カーソル移動 |
3 | option-クリック | クリックした位置へ移動 | カーソル移動 |
4 | control-U・K | 行頭・行末まで削除 | 削除 |
5 | control-W | 次のスペースまで削除(左方向) | 削除 |
6 | option-delete | 1単語ずつ削除(左方向) | 削除 |
7 | control-Y | 直前に削除したテキストをペーストする | 操作を戻す |
8 | control-- (controlとマイナス) |
操作を1つ戻す(undo) | 操作を戻す |
9 | ↑・↓ | コマンド履歴を遡る・進む | 履歴 |
10 | option-shift-> | コマンド履歴の末尾(新)へ移動 | 履歴 |
11 | control-R、キーワード | コマンド履歴をキーワード検索 | 履歴 |
12 | 検索中にcontrol-R・S | キーワード検索を遡る・進む | 履歴 |