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/ 와 동일 p) P.

다음에 추가:

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
}

관련 정보