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
$VISUAL
vi
vi
^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
}