zshにはエディタ機能も - zed

zshはシェル(shell)でありながら、エディタの機能「zed」を備えている。簡単なファイルの編集であれば、zshの提供しているエディタ機能で十分だ。使うにあたっては、まずはプロンプト1.1のようにzedファンクションを読み込んでおく。読み込んだ後は、プロンプト1.2のように"zed ファイル名"と入力すれば編集を行える。

プロンプト1.1 zedファンクションを読み込む

% autoload zed

プロンプト1.2 ファイルの編集を行う

% zed file_name

設定されているzshのキーバインドによるが、基本的にzedでは表1.1のキーを使える。ファイルを編集して保存する場合には、キーボードから[Ctrl]-x [Ctrl]-w、保存せずに終了するなら[Ctrl]-cと入力する。ここまで覚えたら、早速編集してみよう。

表1.1 zedエディタのキーバインド

ショートカットキー
内容
[Ctrl]-x [Ctrl]-w 保存および終了
[Ctrl]-c 保存せずに終了

zedでファイル編集

図2.1にzedでファイル編集を行っている様子を示す。このように、zedはエディタでありながらターミナルでそのまま編集を行える。zshで複数行のコマンドを入力した場合に、上下左右に移動しながら編集できることに気が付いた読者もいることだろう。まさに、これがそのままエディタになっている。

図2.1 zedでファイルを編集

コマンド結果を表示させながらそのまま編集できるなど、これはこれで使い出すとなかなか便利である。エディタとしての機能はそれほど持ってはいないが、ちょちょいと設定を変更する場合にはこれで十分だ。

zedで関数やコマンドを編集

zedが素晴らしいのはここからだ。zedは関数の編集機能を持っている。オプションに-fを指定して、その後に関数名を指定すれば関数の編集画面が表示される。

プロンプト3.1 zedで関数を編集する場合は-fを指定

% zed -f function_name

存在しない関数名を指定すると、図3.1のように関数の新規作成画面が表示される。すでに存在する関数名を指定すれば、その関数の編集画面になる。

図3.1 存在しない関数名を指定した場合には関数の新規作成画面が表示される

図3.2は、関数名としてzedを指定したものである。これはzed自身がzshの関数として作成したものである。つまり、zedはzshで実装されている特別な機能ではなく、既存のzshの機能を組み合わせて作成された関数なのである。関数でエディタを作ってしまうのだから、ぶっ飛んでいると言わざるを得ない。

図3.2 zed関数を編集しているところ - なんとzedは関数で作成されている

保存した関数はそのシェルで有効だ。もともとシェルが設定されているファイルに保存されたり、ほかの設定ファイルに書き込まれたりするものではないので、シェルを終了すれば元に戻る。たくさんの機能を関数で設定して使っている場合には、zedはかなり便利に使える。その場限りで動作を変えたいと思ったら、zedを使ってちょちょいと編集というわけだ。

zed関数に記載されているファイルには、リスト3.1のようなコメントが記載されている。ここにzshらしさがあると言ってもよいだろう。

リスト3.1 zed関数が記載されているファイルのコメントの一部

# No other shell could do this.

ワーニング!!

zedは面白い機能ではあるものの、一般的なエディタではない。そのため巨大なテキストファイルを編集といったことは避けたほうが良いだろう。はっきり言って、処理が重くて使いものにならない。ちょっとしたコマンドとして利用するのがベストである。