zsh の履歴を活用する備忘録です.
簡単なものだけ.詳しくは
$ man zshexpn
とすれば分かりますが,正直,たくさんありすぎるのと,どう使うのかイマイチ分かり難くて最初の方で心が折れました.でも,最初の方だけでもかなり履歴が再活用し易くなりました.
最も基本的な履歴の参照方法
! を Event Designators と呼ぶらしいです.これを指定することで履歴の参照が行われます.histchars を設定すれば ! 以外を Event Designators とすることができるみたい.
$ !! # 直前のコマンドを参照 $ !n # n番目のコマンドを参照する $ !-n # 現時点にn個前nコマンドを参照する $ !str # 現時点に最も近いstrで始まるコマンドを参照 $ !?str[?] # 現時点に最も近いstrを含むコマンドを参照 $ !# # 現在行を参照
利用例は以下の通り.
$ history ✘ 127 ... 5 aaa 6 bbb 7 ccc ... $ ssh !5 $ ssh aaa $ hhh !# $ hhh hhh $ echo !?cc?test # 参照したcccの後にtestという語を続ける ✘ 1 $ echo ccctest
履歴の一部を参照する(Word Designators を使う)
: を Word Designators と呼ぶらしいです.これを使って履歴の一部を参照することができるようになります.
:0 # 入力値の0番目の単語 :n # 入力値のn番目の単語 :^ # 入力値の1番目の単語 :$ # 入力値の最後の単語 :% # ?strの検索に当てはまる最も最近の単語(WORD) !?str?:% の形でしか使われない :x-y # x番目からy番目の入力単語 :* # 1番目以降の全入力単語 :x* # x番目以降の全入力単語 :x- # x*と同じ
使用例は以下の通り.
$ history ... 13 aaa bbb ccc ddd eee fff $ !13:0 aaa $ !13:^ bbb $ !13:^-$ bbb ccc ddd eee fff $ !13:1-5 bbb ccc ddd eee fff $ !13:* bbb ccc ddd eee fff $ !13:0* aaa bbb ccc ddd eee fff
履歴の一部を改変する(Modifiers を使う)
: に続けて指定することで,履歴の一部を改変して利用することができます.
:a # ファイル名に絶対パスを付け加える :A # ファイル名にシンボリックを解決して真のパスを付け加える :c # コマンドに$PATHからパスを付け加える :e # ファイル名の.以下の拡張子を除く全ての部分を削除する :h # ファイル名のみを残す :l # 入力値を全て小文字にする :q # 入力値を'でquoteする :Q # 入力値のquoteを1レベルだけ削除する :r # ファイル名の.以下の拡張子を削除する :s/l/r[/] # 最初に現れるlをrに置き換える :gs/l/r # 全てのlをrに置き換える :s/l/r/:G # gs/l/rと同じ :& # sによる置き換えを繰り返す :t # ファイル名からパス部分を削除する :u # 入力値を全て大文字にする
他に P と x があり,P は A と同様,x は q と同様みたいなのですが,いまいち何が違うのか今の所分かりません.
使用例は以下の通り.
$ history ... 71 ls ... 88 aaa aaa aaa aaa aaaa AAA ... 90 90 ls test.txt ... $ !71:a /home/username/ls $ !71:c /bin/ls $ !90:1:e txt $ !90:1:a:h /home/username $ !90:1:a:t test.txt $ !88:l aaa aaa aaa aaa aaaa aaaa $ !88:u AAA AAA AAA AAA AAAA AAAA $ !88:q 'aaa' 'aaa' 'aaa' 'aaa' 'aaaa' 'AAAA' $ !88:q:q:Q 'aaa' 'aaa' 'aaa' 'aaa' 'aaaa' 'AAAA' $ !88:s/aaa/bbb bbb aaa aaa aaa aaaa AAAA $ !88:gs/aaa/bbb bbb bbb bbb bbb bbba AAAA $ !88:s/aaa/bbb/:& bbb bbb aaa aaa aaaa AAAA
マニュアルはこの後に Process Substitution …… と続きますが,基本的な再活用のためにはこのくらい分かってれば私の場合十分なのでここまでとしておきます.いや,正直言うと,あまりのマニュアルの分かり難さと長さに心が折れたんですが……
必要になったらまた追加していきたいと思います.
以上!