Edited at

zsh の killring を拡張する

More than 1 year has passed since last update.


はじめに

zsh の killring はかなり使い辛いと前々から思っていたので、改善してみました。


killring のサイズを増やす

zsh の killring はデフォルトでサイズが 8 に固定されているので、まずはこれを増やします。


.zshrc

function expand-killring(){

killring+=( '' )
zle ${WIDGET#expand-}
}

function {
local widget

for widget in kill-{buffer,line,region,whole-line} {backward-,}kill-word copy-region-as-kill; do
zle -N expand-$widget expand-killring
done
}

# キーバインドはお好みで
bindkey '^X^K' expand-kill-buffer
bindkey '^K' expand-kill-line
bindkey '^W' expand-kill-region
bindkey '^U' expand-kill-whole-line
bindkey '^[d' expand-kill-word
bindkey '^[h' expand-backward-kill-word
bindkey '^[w' expand-copy-region-as-kill


これで killring のサイズ制限がなくなりました。


yank 時に killring の一覧から選択する

killring に保存できるテキストが増えたら、yank 時に一覧から選択したくなるのが人情ってもんです。peco を使っている場合はこんな感じです。


.zshrc

function peco-yank(){

local -U texts=( $CUTBUFFER $killring )
local selected="$(peco --prompt 'Kill Ring>' <<< ${(F)texts})"

if [[ -n "$selected" ]]; then
zle -f yank
YANK_START="$CURSOR"
LBUFFER+="$selected"
YANK_END="$CURSOR"
CUTBUFFER="$selected"
killring=( $texts )
fi

zle clear-screen
}

zle -N peco-yank
bindkey '^[Y' peco-yank


直前に kill したテキストは killring ではなく CUTBUFFER に保存されているので、まとめて選択候補にするようにしてます。また yank したテキストを CUTBUFFER に設定し直すことで Ctl-y で連続して yank できるようにしてあります。


まとめ

上記設定はまだ使い込んでいないので改善の余地があるかもしれませんが、これだけで killring の使い勝手がかなり向上した気がします:metal: