3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zsh の killring を拡張する

Last updated at Posted at 2017-11-15

はじめに

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:

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?