zshの本でお勉強 第3章

zshの本 (エッセンシャルソフトウェアガイドブック)
第3章はヒストリ。「ヒストリリスト」という言葉が何十回と現れてきてゲシュタルト崩壊します。

ヒストリ利用に使う変数

  • HISTFILE
  • HISTSIZE
  • SAVEHIST

ヒストリ展開制御

"fc -l"で一覧表示。"!"から始まる様々な展開方法がある

!N / !-N

一覧で現れた番号から直接指定、もしくは"-"で相対指定。

$ fc -l
...
10037  echo hoge
10038  ls
10039  pwd
$ !10037
echo hoge
hoge
!String

Stringに対し先頭からの一致でマッチしたもの。

$ echo fuga
fuga
$ !ec
echo fuga
fuga
!?String?

部分文字列一致でマッチしたもの。

$ echo hoge
hoge
$ !?og?
echo hoge
hoge
!!

直前のコマンド。

!#

現在のコマンドラインでそれまでに入力したものすべて。

$ echo hoge; !#
echo hoge; echo hoge;
hoge
hoge

このへんは全部bashも同じっぽい。

展開ヒストリの引数

ヒストリイベント選択の後に":"で繋げて展開したコマンドラインの引数を取得できる。

$ touch hoge fuga piyo
$ echo !to:0
echo touch
touch
$ echo !to:3
echo piyo
piyo

直接数字を指定するほか、

^

第1引数

$

最後の引数

%

!?String? で検索した場合のマッチしたものを含む引数全体

M-N

第Mから第Nまでの引数

*

第1から最後まで

M*

第Mから最後まで

M-

第Mから、最後から2番目までのすべて


といった取り方がある。全然知らなかったけど、このへんもbashも同じようだ

ヒストリ編集子

このへんはzshの本を買って勉強し始めた - すぎゃーんメモで触れたやつ。引数の指定のあとにさらに繋げることができるようだ。

$ touch hoge fuga piyo foo bar baz
$ !to:3*:p
piyo foo bar baz
$ !to:3*:u:p
PIYO FOO BAR BAZ

だいたいbashも同じだけど、":Q", ":l", ":u"はzsh固有のもの、とのこと

ヒストリリストの参照、編集など

"fc"コマンドを使う。オプションなどは"man zshbuiltins"あたりで参照。見てみたところ"-m"でのパターン指定などはbashには無い機能のようだ。

ヒストリ制御オプション

すげーたくさんある。かなり色々カスタマイズできると思っておいてよさそう。