zsh で履歴を menu-select で選べるようなの
zsh で履歴を menu-select で選べるようなのを http://www.zsh.org/mla/users/2004/msg00383.html を参考にしつつ書いてみた。
_history_select
:
#compdef -k menu-select ^xs ^x^s _history_select() { local h local -a hists disps h="$(fc -l -n -m "*${BUFFER}*" -1 0)" if [[ -z "$h" ]]; then # no histories matched return 1 fi # split by newline hists=(${(f)h}) disps=(${(f)"$(fc -l -n -i -m "*${BUFFER}*" -1 0)"}) if [[ -n "${BUFFER}" ]]; then # highlight matches disps=("${disps[@]//(#b)(${~BUFFER})/${fg[magenta]}${match[1]}${fg[black]}}") fi # FIXME: if (( CURRENT != 1 )); compadd insert result in wrong place # TODO: starts with interactive mode compadd -U -Q -l -V hists -d disps -a hists } _history_select "$@"
$fpath
以下に置いて ^x^s
で開始。
archives/2011-01/2011-01-31_1.rst の設定をしてあるなら ^s
で interactive mode に移って候補を絞り込める。
ホントは開始後すぐに interactive mode に移りたいんだけど、うまくいかん。 zstyle ':completion:*' menu select interactive
しちゃうと他の補完も道連れになっちゃうし、
普通の補完を一回やらないと何故か動いてくれない。