zshの本を買って勉強し始めた

zshの本 (エッセンシャルソフトウェアガイドブック)

zshの本 (エッセンシャルソフトウェアガイドブック)

突然思い立って買って、読み始めた。現在第4章。
ちゃんと調べるでもなく何となく入れて使ってみてる、という程度だったので、本を読んでみると知らなかったことがたくさん出てきて面白い。

コマンドラインスタック

長いコマンドを途中まで打って、「あ、これ実行する前にあのコマンドでアレを確認しておきたい…!」というときに"Esc-Q"でコマンドをスタックに退避させておくことができる、とのこと。

$ touch /hoge/fuga/piyo/dummy{1..100}

とファイルを作ろうと思ったところで、あ、その前にディレクトリを作っておいてそこに作るようにしなきゃ、と思ったら"Esc-Q"。一回コマンドラインはクリアされる。改めてmkdirを実行

$ mkdir /hoge/fuga/piyo

…と、その前にいま何時だっけ、というとき、また"Esc-Q"でさらにスタックへ

$ date
Tue May 25 09:30:20 JST 2010
$ mkdir /hoge/fuga/piyo

すると、実行後にさっき途中まで打ったコマンドが復元される。それも実行するとその前にスタックに入れた最初のコマンドが復元される。
使い込まないと咄嗟には出て来ないかも知れないけど、コマンド途中まで打ってから一回消して戻る、とかはよくやっているような気がするので便利かも。

変数の展開修飾子

本では「編集子」って書いてあるけど「修飾子」の方がググったときにヒットしやすい気が。
例えばパスを表す変数$PWDとかに対し、末尾に":h"とか":t"とかつけることで加工して展開してくれる。

$ pwd
/Users/sugyan/temp/hoge
$ echo $PWD
/Users/sugyan/temp/hoge
$ echo $PWD:h
/Users/sugyan/temp
$ echo $PWD:t
hoge

という具合に。他にも、

$ echo $PWD:u
/USERS/SUGYAN/TEMP/HOGE
$ echo $PWD:gs/e/Z/
/UsZrs/sugyan/tZmp/hogZ

など色々加工できる。このへんはbashではヒストリ展開のときにしか使えないそうな。
この展開修飾子については

man zshexpn

の"Modifiers"の項をみると色々書いてあるようだ。覚えられる気がしないけどw

追記

id:hchbawさんからトラックバックで教えていただきました! "(:"とすることでこの展開編集子もちゃんと補完されます!
それ補完できます!RE:zshの変数の展開編集子 - hchbaw記
なるほどー、この補完使えばいちいち覚える必要ないですね! ありがとうございます!!