意外と知らない?ターミナルキーバインドまとめ

シェル

こんにちは。仁科(@nishina555)です。

以前、『方向キーいらず!テキスト編集が捗るMacショートカットキーまとめ』の記事でMacのショートカットキーを紹介しました。

方向キーいらず!テキスト編集が捗るMacショートカットキーまとめ

今回はターミナルの作業効率化の話です。
エンジニアの方にとってターミナル上での作業は仕事でかなりの時間を占めていると思います。

そんなエンジニアにとって切っても切れない関係のターミナル操作ですがキーバインドはちゃんと使えていますでしょうか?

「キーバインド」には「ショートカットキー」や「キーバインディング」など別の呼び方がありますが、今回は「キーバインド」という言葉で統一します。
カーソルの移動やコマンドの修正をするときに方向キーやdeleteキーをずーーと長押ししているなんてことはありませんか?

もしそのように作業をしているのであれば、キーバインドを活用することをオススメします!

ターミナルには便利なキーバインドがたくさん存在しており、キーバインドを利用することで作業効率が一気にあがります。

恥ずかしながら、僕もちゃんと使いこなせていなかったキーバインドがいくつかありました。

今回はターミナル操作をする上で便利なキーバインドを紹介したいと思います。

なお、僕(@nishina555)の環境についてですが、PCはMac、ターミナルはiTerm2、シェルはzshを利用しています。

実際にターミナル上で動作を検証して記事を書いていますが、ご自身の環境によってはキーバインドの動作が異なるかもしれませんのでご了承ください。

「ターミナルのキーバインド」という言葉ですが、
「GNU Readlineというライブラリをもとに実装されている、ターミナル上のシェルのキーバインド」といったほうが正確かもしれません。

しかし、「ターミナルのキーバインド」と説明したほうが直感的でわかりやすいので、この記事では「ターミナルのキーバインド」と紹介します。

ターミナルのキーバインドは「Ctrlキー」と「Metaキー」によって成り立っている

ターミナルのキーバインドの紹介をする前に、キーバインドの基礎的な部分について解説をしたいと思います。

ターミナルのキーバインドは「Ctrl+英数字」もしくは「Esc+英数字」の組み合わせで成立しています。

このEscキーに関してですが、Metaキー(メタキー)と呼ばれており、MacではデフォルトのMetaキーがEscキーとなっています。

キーバインドを見てわかるかたもいると思いますが、ターミナルのキーバインドはEmacsのキーバインドがベースになっています。

そのため、CtrlキーとMetaキーを組み合わせてターミナルのキーバインドが作成されています。

他のサイトやリファレンスなどでは、例えば「Ctrl + x」のキーバインドを「C-x」、「Esc + x」の組み合わせを「M-x」のように記載しているところもあります。

今回紹介するキーバインドは標準のMac環境で実際に叩くキーボードの組み合わせを表示しています。

ターミナルの『移動』に関するキーバインド一覧

キーバインド 内容
「Ctrl」+「a」 行頭に移動
「Ctrl」+「e」 行末に移動
「Esc」+「b」 1単語前進
「Esc」+「f」 1単語後退

ターミナルの『削除』に関するキーバインド一覧

キーバインド 内容
「Ctrl」+「h」 バックスペース(カーソルの前を削除)
「Ctrl」+「d」 デリート(カーソルの後ろを削除)
「Esc+「d」 カーソルの単語を削除

ターミナルの『切り取り・貼り付け』に関するキーバインド一覧

キーバインド 内容
「Ctrl」+「w」 カーソルの前を単語単位で削除(切り取り)
「Ctrl」+「k」 カーソルから後ろを削除(切り取り)
「Ctrl」+「u」 zshの場合: 行削除(切り取り)
bashの場合: カーソルから行頭までを削除(切り取り)
「Ctrl」+「y」 上記のコマンドで切り取ったものを貼り付け

切り取りと貼り付けといえば、「Command + x」と「Command + v」の組み合わせが一般的ですが、上記の組み合わせでも実現できます。

しかし、切り取りと貼り付けのキーバインドの組み合わせについては混合することができないので注意しましょう。

つまり、「Command + x」で切り取られた文章は「Command + v」で貼り付けられますが、「Ctrl + y」では貼り付けられません。

これはキーバインドで切り取られた内容を保存する領域がそれぞれで異なるためです。
「Command + x」で切り取られる内容はMacのクリップボード、「Ctrl」で切り取られる内容はキルリング(kill-ring)と呼ばれる領域に保存されます。

参考: iTerm2のMetaキー(メタキー)をEscキーからOptionキーに変更する方法

冒頭で説明したとおり、MacのデフォルトのMetaキー(メタキー)にはEscキーが採用されています。
Escキーは非常に打ちづらい場所にあるので、OptionキーをMetaキー(メタキー)として利用するのが一般的です。

ここでは実際に僕が使っている、iTerm2でOptionキーをMetaキーに設定する方法について説明します。

Preferencesを開き、「Profiles -> Keys」と選択するとOptionキー(⌥)の挙動を設定できる箇所があるので「Esc+」を選択します。

これにより、例えば「Esc + d」の操作を「Option + d」でも実行できるようになります。

ターミナルのキーバインドをEmacsからVimに変更したい場合

ターミナルのデフォルトのキーバインドはEmacsベースとなっています。

しかし人によってはVimライクにターミナルの操作をしたいという人もいると思います。

ここでターミナルのキーバインドをEmacsからVimライクに変更する方法について紹介します。

ターミナルのキーバインドの元となっているものは、ターミナル上で動くシェルが呼び出しているGNU Readline(以下、Readline)というライブラリです。

ReadlineをVimライクなキーバインドに変更することで、ターミナルの操作もVimのように扱うことができます。

ReadlineのキーバインドをVimライクにするには以下のようにします。

~/.inputrc

set editing-mode vi

これでターミナルのキーバインドもVimベースになります。

しかし、Readlineの設定を変更すると、ターミナル以外でもReadlineを利用しているCUIアプリケーションは全てVimライクなキーバインドになるので気をつけましょう。

一時的に切り替える場合は以下のようなシェルを実行します。

# viモードにする場合
$ set -o vi
# emacsモードにする場合
$ set -o emacs

Readlineのキーバインド変更方法については以下の記事に詳細が書かれているので、興味のある方はご覧になってください。

まとめ

以上でターミナルで使うキーバインドの説明を終わります。

キーバインドは使い始めこそ忘れたり、打ち間違えたりしますが、慣れれば無意識で利用することができます。

長い時間利用するターミナルだからこそ、ぜひキーバインドを習得して作業効率をあげてみてはいかがでしょうか?

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!