Ctrl-yはzshから行を復元しません

Ctrl-yはzshから行を復元しません

Ubuntu 22.04でzsh 5.8.1を実行しています。プロンプトにいくつかのテキストが表示され、Ctrl+と入力すると期待uどおりに行が消去されます。しかし、Ctrl+を入力yすると

$ ^Y

読み出しラインバッファが固定されない原因は何ですか?

これは私の.zshrcです。

export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME=""

plugins=(
    colored-man-pages
    colorize
    git
    zsh-autosuggestions
    zsh-interactive-cd
    vi-mode
)

ZSH_AUTOSUGGEST_STRATEGY=(history completion)

source $ZSH/oh-my-zsh.sh
unalias ls
unalias ll
unalias lsa

unalias gst
alias gs='git status'
alias gcob='git checkout -b'

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
bindkey "^[." insert-last-word

_sig_array=($(kill -l))

_return_status() {
    ret=$?
    if [ $ret -ne 0 ]; then
        if [ $ret -le 128 ]; then
            echo $ret
        else
            sig=$(( $ret - 128 ))
            desc=$_sig_array[sig]
            if [ "$desc" != INT -a "$desc" != TSTP ]; then
                echo SIG$desc
            fi
        fi
    fi
}

_return_status_formatted() {
    out=$(_return_status)
    if [ -n "$out" ]; then
        echo "%F{red}[$out]%f "
    fi
}

_current_branch_formatted() {
    out=$(current_branch)
    if [ -n "$out" ]; then
        if [ -n "$(git status -s | grep -v '^\?')" ]; then
            color=magenta
        else
            color=cyan
        fi
        echo "%F{$color}(git:$out)%f "
    fi
}

export PS1='%F{blue}%n%f@%F{green}%m%f:%F{red}%~%f $ $(_return_status_formatted)$(_current_branch_formatted)'

答え1

zshまたは、変数に含まれている場合(必要に応じて)、デフォルトではviキーバインディングが使用されます。$EDITOR$VISUALvivi

^Y貼り付けはemacsキーバインディングです(vi/と同じpP

次に追加:

bindkey -e

~/.zshrcどのエディタを選択しても、emacsキーバインディングが必要であることを示します(と同じtcsh)。またはset -o emacs(kshと同じ)。


あなたに関するその他の注意~/.zshrc

bindkey "^[." insert-last-word

これはデフォルトでスキーマにすでに存在するため、emacs必要ありません。

すでに組み込み$signals配列があります(== 0で始まるので、数字から名前を取得するEXIT必要があります)。$signals[signum+1]

アクションがgrep -v '^\?'指定されていません。grep -v '^?'で始まる行を削除する、?またはgrep -v '^\\?'で始まる行を削除するために使用されます\?

local関数がグローバル変数でない場合は、関数で変数を宣言することをお勧めします。

また、見ることができます[[ $desc = (INT|TSTP) ]] || echo SIG$desc

通常、他のシェルと同様に、組み込み-a演算子は[使用されなくなりました。

ここでは、以下を((...))一貫して使用できます。

_return_status() {
    local sig desc ret="$?"
    if (( ret != 0 )); then
        if (( ret <= 128 )); then
            echo $ret
        else
            (( sig = ret - 128 ))
            desc=$signals[sig+1]
            if [[ $desc != (INT|TSTP) ]] echo SIG$desc
        fi
    fi
}

関連情報