Readline ショートカット入門 - Ctrl+R / Ctrl+A でターミナル操作高速化

Readline ショートカット入門 - Ctrl+R / Ctrl+A でターミナル操作高速化

この記事でできるようになること

  • Ctrl+A / Ctrl+R などの基本ショートカットでターミナル操作を速くできる
  • 過去に打ったコマンドを素早く呼び出せる

前提知識(先に読むと理解しやすい記事)

ターミナル操作、もっと速くできる

コマンドを打ち間違えることがある。そのたびに矢印キーを何度も押す。カーソルを行き来させるだけで時間がかかる。さっき打った長いコマンドを、もう一度最初から入力し直すのも同じくらい面倒だ。

こうした「地味に遅い操作」は、ショートカット(キーバインド。特定のキーの組み合わせで操作を呼び出す仕組み)を覚えるだけで、一気に解決する。

この記事では、ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。入力を高速化する Readline ショートカットを、リナとライニー先輩の会話でやさしく整理していく。bash でも zsh でも、ほぼ同じキーが使える(bash・zsh は「シェル」の種類だ。シェルとは、打ったコマンドを受け取って実行するプログラムのこと)。

この記事でわかること

  • ショートカットの正体が「Readline」というライブラリであること
  • カーソルを一瞬で行頭・行末へ飛ばす方法(Ctrl+A / Ctrl+E)
  • 入力ミスをまとめて消す行編集(Ctrl+U / Ctrl+K / Ctrl+W)
  • 過去のコマンドを検索して再利用する Ctrl+R
  • 今日から使える厳選ショートカット早見表
  • 覚えたショートカットを実際に試すミニ課題

1. そもそもショートカットの正体は?

結論: Ctrl+A などのショートカットは、bash 固有の機能ではない。「Readline」という行編集ライブラリの機能だ。だから多くのシェルで共通して使える。

リナ: ライニー先輩、コマンドの途中でカーソルを動かしたいとき、いつも矢印キーを連打しています。遅いんです…
ライニー先輩: それ、ショートカットを使えば一瞬だよ。しかも、そのショートカットは bash だけの機能じゃないんだ。
リナ: え、bash の機能じゃないんですか?
ライニー先輩: うん。コマンドラインで「文字を打つ・消す・カーソルを動かす」部分は、Readline(リードライン)という共通の部品が担当している。「行編集ライブラリ」とも呼ばれる、入力1行の面倒をみる部品だよ。bash も、たいていの zsh も、このキー操作をそのまま受け継いでいるんだ。
リナ: だから一度覚えれば、いろんな場所で使えるってことですね。
ライニー先輩: その通り。今日覚えるキーは、SSH(別のコンピュータへ遠くからログインする仕組み)でつないだサーバーの上でも、そのまま効くよ。一度覚えれば、ずっと使えるんだ。

Readline は「行を編集する係」

Readline は、ターミナルに表示される1行のコマンドの面倒をみている。入力・修正・履歴呼び出しまで、すべて担当する。標準では Emacs というエディタ風のキー割り当てになっている。だから Ctrl 系のキーが多い。

2. カーソルを一瞬で行頭・行末へ

結論: Ctrl+A で行頭へ、Ctrl+E で行末へ、一瞬で移動できる。長いコマンドの先頭を直すとき、矢印キーの連打が不要になる。

リナ: まず何から覚えるのがおすすめですか?
ライニー先輩: 一番効くのは「カーソル移動」だね。長いコマンドの先頭に sudo を付け忘れた。そんなとき、Ctrl+A で一瞬で行頭に飛べる。
リナ: A は何の意味ですか?
ライニー先輩: A は行の Ahead(先頭)、E は End(末尾)。そう覚えるといいよ。試しに長めのコマンドを打って、まだ Enter は押さずにやってみよう。
echo これはとても長いコマンドの例です
キー 動作 覚え方
Ctrl+A 行頭へ移動 Ahead(先頭)
Ctrl+E 行末へ移動 End(末尾)
Ctrl+F 1文字右へ Forward
Ctrl+B 1文字左へ Backward
Alt+F 1単語右へ Forward word
Alt+B 1単語左へ Backward word

1文字ずつなら矢印キーでもいい。けれど、単語単位で飛べる Alt+F / Alt+B を覚えると、パスファイルやディレクトリの場所を表す文字列。やオプションの修正にかかる手数が減る。

macOS の標準ターミナルでは、Alt(Option)キーがそのままでは効かないことがある。その場合は Esc を押してから F を押すと、同じ動きになる。

3. 入力ミスをまとめて消すには?

結論: Ctrl+U はカーソルより前を全削除する。Ctrl+K は後ろを全削除する。Ctrl+W は直前の単語を削除する。Backspace の連打から卒業できる。

リナ: コマンドを打ち間違えたとき、Backspace を押しっぱなしにして、全部消しています…
ライニー先輩: それも卒業しよう。まずは Ctrl+U を覚えよう。カーソルより前を、まとめて消せるキーだよ。
リナ: あの、長いコマンドを打っている途中で、単語を1つだけ消したかったのに、間違えて Ctrl+U を押してしまったことがあります。そうしたら、打っていた文字が全部消えて、焦りました…
ライニー先輩: それ、よくある失敗だね。カーソルが行の末尾にあると、Ctrl+U は「そこまで打った内容ぜんぶ」を消してしまうんだ。
リナ: そうだったんですね…! 単語1つだけ消したいときは、別のキーを使えばいいんですか?
ライニー先輩: そう。直前の単語1つだけなら Ctrl+W だよ。ここでいう「単語」は、空白で区切られたひとかたまりのことなんだ。
リナ: /home/lina/Documents みたいなパスは、どうなりますか?
ライニー先輩: パスには空白がない。だからひとかたまりと判定はんていされ、まるごと消えるよ。「/ ごとに1階層ずつ消える」わけではないから、そこは注意してね。
リナ: 全部消したいときは、どうすればいいですか?
ライニー先輩: 行頭に Ctrl+A で戻ってから Ctrl+K を押せば、確実に全部消せるよ。逆に Ctrl+U を行頭で使っても、何も消えない。カーソルより前に文字がないからね。
キー 動作
Ctrl+U カーソルよりをすべて削除
Ctrl+K カーソルより後ろをすべて削除
Ctrl+W カーソル直前の単語(空白で区切られたひとかたまり)を削除
Ctrl+Y 直前に削除した内容を貼り付け

Ctrl+U の消える範囲はシェルによって違う

bash では Ctrl+U はカーソルより前だけを消す。zsh では初期設定のまま使うと、カーソル位置に関係なく行全体が消える。まずは短い入力で1回試して、どこまで消えるか自分の目で確かめよう。

消す → 貼る はセット

Ctrl+U / Ctrl+K / Ctrl+W で消した内容は「キルリング」という場所に一時保存される。Ctrl+YYank=引き出す)でそのまま貼り付け直せる。間違えて消しても慌てなくて大丈夫。

4. さっき打ったコマンドをもう一度使うには?

結論: Ctrl+R履歴りれき逆順ぎゃくじゅんに検索できる。一部のキーワードを打つだけで、過去の長いコマンドを呼び戻せる。

リナ: 昨日打った長い docker コマンドを、もう一度使いたいです。また全部打つしかないですか?
ライニー先輩: そこで Ctrl+R だよ。履歴検索といって、過去に打ったコマンドをキーワードで探し出せるんだ。Ctrl+R を押して、コマンドの一部、例えば docker と打ってみて。
リナ: あ! 昨日のコマンドが出てきました!
ライニー先輩: でしょう。そのまま Enter を押せば実行できる。もう一度 Ctrl+R を押せば、もっと古い候補が出るよ。左右の矢印キーや Ctrl+E を押せば、編集してから実行できる。やめたいときは Ctrl+G か Ctrl+C で抜けられるよ。
(reverse-i-search)`docker': docker compose up -d --build

Ctrl+R の操作の流れ

  1. Ctrl+R を押す((reverse-i-search) 表示になる)
  2. コマンドの一部を入力する(部分一致で候補が出る)
  3. もう一度 Ctrl+R:さらに古い候補へ
  4. Enter:そのまま実行 / Ctrl+G:キャンセル

上下の矢印キーや Ctrl+PPrevious)/ Ctrl+NNext)でも履歴を1つずつたどれる。直前のコマンドをちょっと直したいだけなら、こちらが手早い。

5. 画面と操作をリセットしたいときは?

結論: Ctrl+L で画面クリア、Ctrl+C で実行中コマンドの中断、Ctrl+D で入力終了ができる。混乱したときに使える「逃げ道」キーだ。

リナ: 画面が出力でいっぱいになって、見づらいときはどうすればいいですか?
ライニー先輩: Ctrl+L を押すと、画面がすぐきれいになるよ。clear コマンドと同じ効果だけど、打つより速い。コマンドが終わらず、固まったように見えるときは Ctrl+C で中断できる。
リナ: 実は前に、コマンドが固まったと思って Ctrl+D を押したことがあります。そうしたらターミナルごと閉じてしまって、すごく焦りました…
ライニー先輩: それ、あるある失敗だね。Ctrl+D は「もう入力しない」と伝えるキーで、動いているコマンドを止める効果はないんだ。
リナ: てっきり中断のキーだと思っていました…!
ライニー先輩: 覚え方はシンプルだよ。止めたいなら Ctrl+C、もう何も入力しないなら Ctrl+Dプロンプトコマンドの入力を待っている状態を示す記号(例 $ や #)。で何も入力せずに Ctrl+D を押すと、ログアウト(シェル終了)になる。cat コマンドで入力待ちのとき、入力を終わらせるためにも使うよ。
キー 動作
Ctrl+L 画面をクリア(clear 相当)
Ctrl+C 実行中のコマンドを中断
Ctrl+D 入力の終わり / 空のプロンプトでシェル終了

Ctrl+CCtrl+D は役割が違う。Ctrl+C は「今動いているものを止める」、Ctrl+D は「もう入力しないと伝える」。固まったように見えたら、まず Ctrl+C を試すのが基本だ。

6. まず覚える厳選ショートカット

結論: いきなり全部は不要だ。「行頭 / 行末移動・行削除・履歴検索」の5つだけ、先に体に入れよう。それだけで、1回の入力にかかる時間が短くなる。

リナ: 数が多くて、どれから覚えればいいか迷います…
ライニー先輩: 最初は5つでいい。下の早見表を上から順に、今日のターミナル作業で意識して使ってみて。1週間で、指が勝手に動くようになるよ。
優先 キー 動作
1 Ctrl+A 行頭へ移動
2 Ctrl+E 行末へ移動
3 Ctrl+U カーソルより前を全削除
4 Ctrl+R コマンド履歴を逆順検索
5 Ctrl+L 画面をクリア

覚えたショートカットは、実際にコマンドを打つ場で使ってこそ定着する。ターミナルの使い方 のページで、手を動かしながら試してみよう。

7. ミニ課題 - 手を動かして確認しよう

リナ: 覚えたことを、実際に試してみたいです!
ライニー先輩: いいね。次の3つを、実際のターミナルで試してみよう。答えを見る前に、まず自分でやってみて。

課題1: 長めのコマンドを入力し(Enter はまだ押さない)、カーソルを行の先頭と末尾へすばやく移動させてみよう。

ヒント1(方向づけ)を見る

矢印キーを何度も押さなくても、1回のキー操作で行の端まで移動できるキーがある。

ヒント2(キー名)を見る

行頭へは Ctrl+A、行末へは Ctrl+E を使う。

答えを見る

echo などで長めのコマンドを入力する(まだ Enter は押さない)。Ctrl+A を押すとカーソルが行頭に、Ctrl+E を押すと行末に、一瞬で移動する。

課題2: 入力したコマンドの途中にカーソルを置き、「前だけ」「後ろだけ」を、それぞれ削除してみよう。

ヒント1(方向づけ)を見る

Backspace を連打しなくても、カーソルを基準に「前」と「後ろ」をまとめて消せるキーが、それぞれ用意されている。

ヒント2(キー名)を見る

カーソルより前を消すのは Ctrl+U、後ろを消すのは Ctrl+K

答えを見る

コマンドの途中にカーソルを置いた状態で Ctrl+U を押すと、カーソルより前が消える。同じ位置で Ctrl+K を押すと、カーソルより後ろが消える。消えた内容は Ctrl+Y で貼り戻せる。

課題3: さっき自分が打ったコマンドを、履歴検索で呼び出してみよう。

ヒント1(方向づけ)を見る

コマンド全体を覚えていなくても、一部のキーワードだけで過去の入力を探し出せるキーがある。

ヒント2(キー名)を見る

Ctrl+R を押してから、コマンドの一部を入力する。

答えを見る

Ctrl+R を押すと (reverse-i-search) と表示される。そこにコマンドの一部(例: echo)を入力すると、一致する過去のコマンドが表示される。Enter で実行、Ctrl+G でキャンセルできる。

まとめ

  • Ctrl 系ショートカットの正体は Readline ライブラリ。bash でも zsh でも共通して使える
  • Ctrl+A / Ctrl+E で行頭・行末へ一瞬移動できる
  • Ctrl+U / Ctrl+K / Ctrl+W で入力をまとめて消し、Ctrl+Y で貼り戻せる
  • Ctrl+U はカーソルより前を全部消す。カーソル位置によっては、思ったより多く消えるので注意
  • Ctrl+R で過去のコマンドをキーワード検索して再利用できる
  • Ctrl+L(画面クリア)・Ctrl+C(中断)・Ctrl+D(入力終了)は覚えておくと安心
  • まずは5つだけ。使って慣れるのが上達の近道

次に読む

この記事を共有

次の一手