zshの各種ユーティリティなどメモ
便利に思ったものをメモ。
Command line stack
ESC-qでコマンドラインをスタックする事が出来、実行後自動的にスタック内容をコマンドラインにセットしてくれる。デフォルトだとスタック内容を目視する手段がないため、それを可能にするスクリプトをzshrcに記述する。ググると、どうやらCtrl-qにバインドするのがパターンのようなので特に拘りなくそのようにバインドする。このスクリプト内容は、前のコマンドラインを1つだけスタックする場合に限り、有効的だと言える。
show_buffer_stack() { POSTDISPLAY=" stack: $LBUFFER" zle push-line-or-edit } zle -N show_buffer_stack setopt noflowcontrol bindkey '^Q' show_buffer_stack
単純に、スタックを出力したいだけの時もある。
ググると、望んでいたものがそのままあったので、ここは自分で書かずに、落として順次設定を加えることにする。
% cd ~/.zsh % git clone https://gist.github.com/7067299.git % cd 7067299* % mv .zsh ../.command_stack.zsh % cd .. && rm -rf 7067299 % echo "zsh ~/.zsh/.command_stack.zsh" >> ~/.zshrc
Suffix alias
alias -s
を用いる事で拡張子を判別して処理を移譲することが出来る。
例えば、テキストファイルを出力する時、コマンドラインには
% cat test.txt
と入力するが、アプリケーションの関連付けや、実行時のオプション設定などを特に気にしないようなユーザーであった場合、
% ./test.txt
と入力し実行できた方が望ましい。そのような時に
alias -s txt=cat
を設定すると、拡張子によって関連付けられているため、出力処理ができるという機能。
少し趣のあるものとしては、C++のファイル名を打ち込むと、ビルドから実行までをさせる、というようなもの。しかし個人的には、historyから辿れば良いし、オプションなども随時設定するので、特に設定はしなかった。参考ページ先では、システム内のコマンドの有無判定を行い、汎用性を上げる試みも書かれているが、システム内にそもそもこういったスクリプトを置く事が現場によって常に許されるわけでもないと思うので、デフォルトの操作感を重視する事にした。でもまあ、この機能は、何かには使えそうだ。
参考:漢のzsh (16) 拡張子ごとにコマンドを自動実行 - 「alias -s」 | 企業IT | マイナビニュース
cd command
Zsh builtinのcd
は引数を二つ取れるらしい。初めて知った。二つ引数を渡した時の処理は以下。
% mkdir test test1 % ls test/ test1/ % mkdir test/git test1/git % ls test/ test1/ % cd test % cd test test1 ~/Documents/Others/test1
Testと、Test1を置き換えた先のパスへ移動する事ができるとのこと。
Directory stack
% cd -<number>
で移動済みのディレクトリへ戻る事ができるが、そのスタック内容を目視する手段がないため、それを可能にするスクリプトをzshrcに記述する。
DIRSTACKFILE="$HOME/.cache/zsh/dirs" if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then dirstack=( ${(f)"$(< $DIRSTACKFILE)"} ) [[ -d $dirstack[1] ]] && cd $dirstack[1] fi chpwd() { print -l $PWD ${(u)dirstack} >$DIRSTACKFILE } DIRSTACKSIZE=20 setopt autopushd pushdsilent pushdtohome ## Remove duplicate entries setopt pushdignoredups ## This reverts the +/- operators. setopt pushdminus
設定すると以下のように目視する事ができる。
% dirs -v 0 ~ 1 ~/Documents/src/cpp 2 ~/Documents/src
help command
そういえばhelpコマンドをzshに乗り換えてから使った事がなかったが、デフォルトでは有効ではないとのこと。一応、有効にした。
autoload -U run-help autoload run-help-git autoload run-help-svn autoload run-help-svk unalias run-help alias help=run-help
既に作成された重複している履歴を排除
したい時のコマンド。初期設定時に役立ちそうだ。
% sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
エイリアスにでも入れておくかな。
まとめ
zsh使い始めて快適すぎて楽しいけど、対話的なログインコマンドシェルのシェア率を知らないのでなんとも言えないが、比較的多いであろうbashに戻れなくなるのが怖い
— 五味 拓樹 (@530506) 2016年7月4日
参考: Zsh - ArchWiki