Rokiのチラ裏

学生による学習のログ

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 - ArchWiki