bashのショートカット覚えてますか?

こんにちは、エンジニアの @akase244 です。

Macの標準シェルがbashからzshに変更されるという話もありますが、まだまだbashを利用されている方も多いかと思います。そんなbashですがショートカットって覚えてますか?

「bash ショートカット」でググると山のように同じような記事がヒットするので改めて説明することもあまりないのですが、、、みなさんはどれくらい使いこなせてるのでしょうか?
正直に言うと、私はあまりに多くてほとんど使いこなせていません。ですが、今回はこの中でも私が(かろうじて)覚えててよく使ってるものを紹介してみようと思います。

前提

今回紹介するショートカットはMacのキーボードを前提に説明しています。利用しているMacの情報はこちら。

f:id:akase244:20190822120400p:plain

bashのバージョンは5.0.2で確認しました。

利用しているbashのバージョン

$ which bash
/usr/local/bin/bash

$ /usr/local/bin/bash --version
GNU bash, バージョン 5.0.2(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

Macにデフォルトでバンドルされているbashのバージョンは3.2.57ですが、bash_completion2の補完機能を利用している都合上、Homebrewでbashを別途インストールしており、今回は5.0.2で確認しています。

Macのデフォルトのbashのバージョン

$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

ショートカットって?

私がよく使っているショートカットは、具体的には↓このコマンドで表示されるような「Control」、「Esc」との組み合わせです。(メタキーの設定方法については割愛しますので気になる方は「メタキー Mac Esc Option」といったキーワードで検索してみてください)

$ man bash |grep 'C-.*)$'
       isearch-terminators (``C-[C-J'')
       beginning-of-line (C-a)
       end-of-line (C-e)
       ・
       ・
       ・
       ・
$ man bash |grep 'M-.*)$'
       forward-word (M-f)
       backward-word (M-b)
       beginning-of-history (M-<)
       ・
       ・
       ・

「man bash」で表示される英語がちょっと。。。という方はこちらのマニュアルページを見るとよいでしょう。

よく使ってるショートカット

私はここに紹介しているとおり、カーソル移動に関するショートカットをよく利用しています。

ショートカット 説明
Control + a カーソル位置を行頭へ移動
Control + e カーソル位置を行末へ移動
Control + b カーソル位置を左へ移動
Control + f カーソル位置を右へ移動
Control + u カーソル位置から行頭までを切り取る
Control + k カーソル位置から行末までを切り取る
Control + w カーソル位置から前の単語を切り取る
Esc,d カーソル位置から後の単語を切り取る
Control + y 切り取った文字列を貼り付け
Control + h カーソル位置の前の文字を削除
Control + d カーソル位置の文字を削除 / 未入力の場合はターミナルを終了
Control + j コマンドを実行
Control + l 画面をクリア
Esc,b カーソル位置を前の単語に移動
Esc,f カーソル位置を後ろの単語に移動

それでは紹介したいくつかのショートカットを実際に入力して動きを見てみましょう。
まず「man bash」と入力した直後でカーソル位置が行末にあると仮定します。

$ man bash[カーソル位置]

「Control + a」でカーソル位置を行頭へ移動。

$ [カーソル位置]man bash

「Control + e」でカーソル位置を行末へ移動。

$ man bash[カーソル位置]

「Control + b」を2回実行して、カーソル位置を左へ2つ移動。

$ man ba[カーソル位置]sh

「Control + f」でカーソル位置を右へ1つ移動。

$ man bas[カーソル位置]h

「Esc,b」でカーソル位置を前の単語に移動

$ man [カーソル位置]bash

「Control + k」でカーソル位置から行末までを切り取る

$ man [カーソル位置]

「Control + y」で切り取った文字列を貼り付け

$ man bash[カーソル位置]

「Control + j」で実行

BASH(1)                                                                BASH(1)

NAME
       bash - GNU Bourne-Again SHell

SYNOPSIS
       bash [options] [command_string | file]

COPYRIGHT
       Bash is Copyright (C) 1989-2018 by the Free Software Foundation, Inc.
・
・
・
・

↑の一連の操作をGIFにしてみたけど、おわかりいただけるだろうか。。。 f:id:akase244:20190820204606g:plain

まとめ

まだまだ紹介しきれないくらい(覚えてられないくらい)たくさんのショートカットがありますが、少しでも覚えておくとちょっとした操作の効率化につながりますよね。
あれ?「Control + r(インクリメンタル検索)」は?と思ってる方もいるのではないかと思いますが、今回はカーソル移動と文字列のコピペ関するショートカットを重点的に紹介しました。
「Control + r」などコマンド履歴に関する操作ついてはまた別の機会にでもまとめようかと思っています。ということで今回はこのへんで。