- さまざまな キーボードショートカットとコマンドの組み合わせを活用して、シェル環境での作業速度と効率を高める方法の整理
- CTRL + W, U, K, Y などの基本ショートカットで行編集、CTRL + A/E, ALT + B/F でカーソル移動、reset でターミナルの復旧が可能
- Bash と Zsh では CTRL + R でコマンド履歴を検索し、!!・!$・ESC+. などで直前のコマンドを再利用、Brace Expansion と Globstar で反復作業を自動化
- Process Substitution、tee、bg/disown などの高度な機能で、プロセス制御とログ管理を効率化
- シェルを 道具箱のように使いこなせば生産性と集中力を高められ、ショートカットを一つずつ習慣化することが重要
ほぼすべてのシェルで動作する基本ショートカットと機能
-
CTRL + W, U, K, Y** の組み合わせは、カーソル位置を基準に単語または行の前後をすばやく削除・復元する**行編集ショートカット
CTRL + W はカーソル前の単語を削除
CTRL + U はカーソル位置から行頭までを切り取り、CTRL + Y で貼り付け可能
CTRL + K はカーソル位置から行末までを切り取り
- CTRL + A / E は行頭と行末へ移動し、ALT + B / F は単語単位で前後に移動
- ほとんどのターミナルで標準で有効になっており、Mac では Option キーを Meta に設定する必要がある
- reset または stty sane コマンドは、バイナリファイルを誤って出力してターミナル表示が壊れたときの復旧に使える
- 画面が壊れていても入力は可能なので、
reset と入力して Enter を押せば復元できる
- CTRL + C / D はそれぞれコマンドの中断と EOF(ファイル終端)シグナルの送信
CTRL + D は空のプロンプトで押すとシェルを終了する
- CTRL + L は
clear コマンドと同じく画面を即座に整理する
- 現在入力中のコマンドを保ったまま、プロンプトを画面上部へ移動する
- cd - は直前のディレクトリへすぐ移動でき、pushd / popd はディレクトリスタックを使って複数の場所を行き来しながら作業できる
- > file.txt はファイルを削除せずに空にするため、権限と所有権を維持できる
- $_ 変数は 直前のコマンドの最後の引数を再利用する
- 例:
mkdir -p /path/newdir && cd "$_"
- set -e, set -u はスクリプトの安全性を高めるオプション
set -e はエラー発生時に即座に終了する
set -u は未定義の変数を参照した場合にエラーとして扱う
set -euo pipefail の組み合わせは、より強力な保護機能を提供する
Bash と Zsh での高度なショートカットと機能
- CTRL + R はコマンド履歴に対して 逆方向インクリメンタル検索を行う
- キーワードを入力すると、過去のコマンドを即座に見つけて再利用できる
- !! は直前のコマンド全体を再実行する
sudo !! で直前のコマンドを管理者権限で再実行できる
- CTRL + X, CTRL + E は現在入力中のコマンドを 既定のエディタ(Vim、Nano など) で開き、修正後に実行する
- Zsh では別途設定が必要
- fc コマンドは、以前のコマンドを
$EDITOR で開いて修正する伝統的な方法
- ESC + . または ALT + . は直前のコマンドの最後の引数をカーソル位置に挿入する
- 繰り返し入力すると、さらに前のコマンドの引数まで順にたどれる
- !$ は同じ機能を非対話的に実行する
-
Brace Expansion** は反復入力を減らす**波括弧展開機能
cp pf.conf{,.bak} → cp pf.conf pf.conf.bak
mv filename.{txt,md} → mv filename.txt filename.md
mkdir -p project/{src,tests,docs} で複数のディレクトリを作成
- Process Substitution
<(command) はコマンド出力をファイルのように扱う
- 例:
diff <(sort file1.txt) <(sort file2.txt) で一時ファイルなしに比較
- Globstar(
**) はサブディレクトリまで再帰的にファイルを探索する
- Bash では
shopt -s globstar で有効化し、Zsh では標準で有効
- 例:
ls **/*.js ですべてのサブフォルダ内の JS ファイルを探索
-
CTRL + Z**,** bg**,** disown** の組み合わせは、プロセスをバックグラウンド実行してシェルから切り離す
CTRL + Z で一時停止 → bg でバックグラウンド実行 → disown でシェルから切り離し
- SSH を終了した後もプロセスを維持できる
- command |& tee file.log は 標準出力(stdout) と 標準エラー(stderr) を同時にパイプへ流す
|& は 2>&1 | の短縮形
tee を使うことで、画面出力とログ保存を同時に行える
シェル活用の重要なアドバイス
- シェルは 道具箱であり、使いこなせば生産性を大きく高められる
- すべてのショートカットを一度に覚えるより、一つずつ習慣化するほうが効果的
- 反復入力と不要なタイピングを減らして、作業フローを単純化できる
- 慣れてくれば、ターミナルはもはや障害物ではなく、自分の作業空間になる
3件のコメント
ほとんど全部Emacsのキーバインドなのに、Emacs自体の話はほとんど出てこず、最近はちょっとしたTipsのようにたくさん共有されているのを見ると、隔世の感があります。readlineライブラリがそっくりそのままEmacsキーバインドを実装しているんですよね。IDEにほぼ全面移行してからもう20年近く経つ気がしますが、いまだに
gdbtuiみたいなものを使っていた化石の立場からすると、やはり良いものは死なないのだと思います。Hacker Newsのコメント
人生が変わったと感じたのは、上矢印キーをリマップした瞬間だった
これで全コマンドを順番にたどるのではなく、すでに入力した文字で始まるコマンドだけを探せる
たとえば
tar -と入力して上矢印を押すと、以前使った tar のオプションがすぐ出てくるzsh では次のように設定する
.inputrcに次を追加する.inputrcでも同じように実現できるターミナルで vim-mode を有効にするとかなり快適になる
3語前でミスした?
3bcwで終わり行全体の削除は
cc、複雑な修正はvで (neo)vim にそのまま開けるすでに (neo)vim を使っているなら、新しいショートカットを覚える必要がないのが最高
ctrl-x+eで neovim で開いて使うのが良い折衷案だset -o viを打つある人が
\#というスクリプトを PATH に入れて、パイプラインの一部をコメントアウトできるようにしていたのが印象的だった~/bin/noglobに こうして bash から zsh スクリプトを呼ぶときの noglob の衝突を避けているmycmd1 #| mycmd2と比べてどんな利点があるのか気になる$PATHに追加するつもりCTRL+W は普通は直前の空白まで削除するので、
/var/log/nginx/全体を消してしまうAlt+Backspace は英字以外の文字の直前まで削除する
ただし、ブラウザのタブを閉じるショートカットと衝突するので注意
$WORDCHARS設定から/を外せば望む動作になる(参考リンク)fzf shell integration で履歴検索を強化するのを勧めたい
デモ動画 / 公式ドキュメント
よく使うトリックが一つある
長いコマンドを打っている途中で別のことを先にやる必要が出たとき、
Ctrl-Cでキャンセルせず コメントアウトして実行して履歴に残す"push-line-or-edit"バインドで可能で、bash ではC-uの後にC-yで似たことができるctrl-uで現在の行を保存して空にし、ctrl-yで貼り戻すこと。zsh ではalt-qでこの流れを自動化できるalt-shift-3で現在のコマンドの先頭に#を付けて新しい行へ移れるLLM風のタイトルはいまひとつだが、いくつかのヒントは役に立ちそうなので試してみるつもり
brace expansion がタブ補完とうまく噛み合わないのは残念。最後のトークンの複製やファイル拡張子の削除のような機能がもっとあるといいのに
zsh の設定で、特定のコマンドを履歴から除外する関数を使っている
たとえば
--forceのような危険なコマンドを履歴に残さないようにするzsh で グローバル alias の自動展開を実装するスニペットを使っている
たとえば
alias -G G='rg -s'と設定すると、command | Gと入力したとき自動的にcommand | rg -sに展開されるspace 入力時に自動展開され、
\aliasと入力すれば展開をスキップできる.bashrcに自作した「deep cd」関数がある引数でもらった文字列を含む最初のディレクトリへ自動で移動する
最初は遅いかと思ったが、思った以上によく使っている
jcや z、fzf のような賢い cd ツールもあわせて見るとよい上向き矢印キーのリマップは、Emacsユーザーなら普通に
c-rでやる。チューニングの果ては純正。