意外と知られていない便利な機能 - タブでファイルグロブを展開

bashやtcshからzshに乗り換えたというユーザ達に、意外にも知られていない機能がある。それがファイルグロブをタブで展開するという機能である。これはzshでも群を抜いて便利な機能なので、ぜひ、知ってもらいたい。

例えばプロンプト1.1のような状況を想定しよう。EmacsでもViでもエディタならば何でも良いのだが、ファイルを編集してディレクトリ内がバックアップファイルだらけになってしまった、という経験のある読者の多いことだろう。

プロンプト1.1 数々のエディタで編集した結果、バックアップファイルの山となる

% ls
file1 file1~ file2.~1.4.~ file3.orig
file1.BAK file2 file2~ file3.~1.2.~
file1.~1.1.~ file2.bak file3 file3~
%

作業が完了した後はこれらバックアップファイルは不要なので、速やかに削除してしまいたいところだ。例えばプロンプト1.1であれば「rm *~」を実行してバックアップファイルを削除すれば良いわけだが、これには以下のような不安が残る。

  • 誤って「rm * ~」とタイプし、すべてを消去してしまう
  • 「~」自体がホームを表現するので、何か不安だ
  • 過去にファイル末に「~」が付くファイルを作ったかもしれない

とにもかくにも「*」を含む場合のrmコマンドを実行する際には、何かと気を使ってしまう。ファイルは削除してしまってからでは遅いのだ。だからわざわざプロンプト1.2のように、一度echoコマンドでファイルブログの内容を確認してから、コマンドを実行したりするのである。

プロンプト1.2 わざわざechoコマンドを使ってファイルグロブの内容を確認してしまうことも

% echo *~
file1.~1.1.~ file1~ file2.~1.4.~ file2~ file3.~1.2.~ file3~
%

しかしながら漢たるモノ、こうした馬鹿の付くほど正直な作業はぜひとも避けたい。シェルは使うものであって、使われるものではないのだ。zshの場合、こういったことにも簡単に対処できる。劇的ビフォア/アフタをプロンプト1.3と1.4に示す。

プロンプト1.3 ファイルグロブの後でタブキーを押すと…

% rm *~[ここでタブキーを押す]

プロンプト1.4 ファイルグロブがヒットする対象に展開される

% rm file1.~1.1.~ file1~ file2.~1.4.~ file2~ file3.~1.2.~ file3~

タブキーを押すと、ファイルブログが展開されるのだ。つまりzshでは、ファイルブログを記述したらタブキーを押して展開し、処理される対象を確認してから作業を行えば簡単…というわけだ。

応用いろいろ - ファイルグロブの展開

bashやtcshを使っていると、ファイルグロブをタグで展開するという癖がついていないので、ファイルグロブを使う場合はやはりecho確認を行ってしまう。しかし、zshを使い出したら、この機能は体に覚えて込ませておくべきである。cd -[Tab]とファイルグロブ[tab]はzshのとても便利な機能の1つだ。

zshのファイルグロブは表現自体もなかなか強力なので、入り組んだ指定をして一発でサクっと対象をすべて絞り込むこともできる。だいたいそういうのはユーザが忘れてしまうものなので、?と*という基本となるファイルグロブと、タブキーで展開して確認という2つを確実にマスターしておこう。入り組んだ指定は覚えてしまえば便利だが、マニュアルを読み返したりファイルグロブを考えている間に、?*とタブキー展開で作業した方が速いことが多い。

タブキーによるファイルグロブの展開はほかにもいろいろと使いやすいことが多い。例えば特定のディレクトリのフルパスをコピー&ペーストしたい場合など、途中までパスをタブキー補完で入力したら最後に*タブキーでその対象となるファイルやディレクトリを展開すれば良いし、いろいろ便利だ。これを機に活用してみよう。