はじめに
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 の使い勝手がかなり向上した気がします