🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Zshの基本コマンドと便利機能を覚えよう(補完・ヒストリ・globbing)

前回の記事で、Oh My Zshを導入し、あなたのZsh環境は見た目も機能も大きくパワーアップしたはずです。エイリアスやテーマ、プラグインによるカスタマイズはZshの大きな魅力ですが、実はZshには、そうした外部ツールに頼らなくても、素の状態でも非常に強力で便利な機能がたくさん組み込まれています。

Bashなどの他のシェルから移ってきた人がZshの虜になる理由の多くは、この「標準機能」の賢さと気の利きようにあります。まるで優秀な秘書が常に隣にいて、あなたの仕事を先読みしてサポートしてくれるような感覚です。

この記事では、Zshが元々持っている3つの強力な柱、「補完機能」「ヒストリ機能」「Globbing(ファイル名展開)」に焦点を当て、その具体的な使い方を解説します。これらの機能を使いこなせば、あなたのコマンドライン作業はさらに一段階、速く、そして快適になることをお約束します!


1. 予測変換レベルの賢さ!Zshの「補完機能」

Zshのキラー機能といえば、何と言ってもこの「補完機能」です。Tabキーを押すだけで、単なるファイル名の補完に留まらない、驚くほど賢いサポートを提供してくれます。

コマンドのオプションを補完する

「このコマンド、どんなオプションが使えたかな…」とマニュアルを調べる必要はもうありません。コマンドに続いて-を入力し、Tabキーを押すだけで、利用可能なオプションを一覧表示してくれます。

$ ls -[Tabキーを押す]
--all                             -A --almost-all                 -B --ignore-backups
--author                          -d --directory                  -D --dired
--color                           -F --classify                   -G --no-group
...(以下略)...

さらに、矢印キーで候補を選択し、それぞれのオプションが何をするのかという説明まで表示してくれます。


文脈を読んで補完候補を切り替える

Zshは、あなたが今打っているコマンドが何を求めているかを理解し、補完する候補を賢く切り替えます。

例えば、プロセスを終了させるkillコマンドの後でTabキーを押すと、ファイル名ではなく、現在実行中のプロセス名の一覧を候補として表示します。

$ kill [Tabキーを押す]
101 zsh      102 login    103 top      104 sshd
...

2. かゆいところに手が届く「ヒストリ機能」

一度実行したコマンドを再利用するヒストリ(履歴)機能も、ZshはBashより遥かにスマートです。

インクリメンタルなヒストリ検索

「以前打った、あの長いgitのコマンドをもう一度使いたい…」そんなとき、Zshならコマンドの冒頭部分(例: git)を入力してから、↑(上矢印)キーを押してみてください。

すると、コマンド履歴全体からではなく、gitで始まるコマンドの履歴だけを遡って検索できます。これにより、目的のコマンドを圧倒的に素早く見つけることができます。

コマンドの実行をやり直す `!!`

!!は、直前に実行したコマンドをそのまま展開する特殊なエイリアスです。これが最も輝くのが、sudoを付け忘れたときです。

$ apt update
E: Could not open lock file ... Permission denied
$ sudo !!
sudo apt update
...

sudo !!と打つだけで、sudo apt updateとして再実行してくれます。この時短効果は絶大です。


3. ファイル選択の達人「Globbing」

Globbingとは、*などのワイルドカードを使って、複数のファイルを一度に指定する機能です。Zshではこの機能が大幅に拡張されており、「拡張Globbing」と呼ばれます。(利用するにはsetopt EXTENDED_GLOBの設定が必要です。Oh My Zshを使っていれば多くはデフォルトで有効です)

再帰的なファイル検索 (**)

**を使うと、サブディレクトリの奥深くにあるファイルまで、一発で検索できます。

# 全てのサブディレクトリ内の.jsファイルをリストアップ
ls -l **/*.js

OR検索 (|)

|を使うことで、「AまたはB」という条件でファイルを指定できます。

# .jpg または .png ファイルをリストアップ
ls *.(jpg|png)

NOT検索 (^)

^を使うことで、「〇〇以外のファイル」という指定ができます。

# .log ファイル以外のすべてをリストアップ
ls ^*.log

数値範囲の指定 (<->)

連番ファイルの中から、特定の範囲のファイルだけを指定するのに便利です。

# image1.jpg から image10.jpg までをリストアップ
ls image<1-10>.jpg

まとめ

今回は、Zshが「最強のシェル」と呼ばれる所以である、標準搭載の便利な機能のいくつかをご紹介しました。

これらの機能は、一つひとつは小さな改善に見えるかもしれませんが、日々の作業の中で積み重なることで、あなたの生産性を大きく向上させてくれます。Zshは、ただコマンドを実行するだけのツールではなく、あなたの作業を積極的にサポートしてくれる「相棒」のような存在なのです。

さて、BashからZshへ本格的に移行しようと考え始めた方のために、次回の記事では、BashスクリプトをZshで動かす際の互換性の注意点や、移行をスムーズに行うためのチェックポイントをまとめて解説します。

BashからZshに乗り換える人のための互換チェックポイント集