我在 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
数组(注意它从EXIT
== 0 开始,因此您需要$signals[signum+1]
从数字中获取名称)。
的行为grep -v '^\?'
未指定。用于grep -v '^?'
删除以 开头的行?
,或grep -v '^\\?'
删除以 开头的行\?
。
local
如果函数不打算成为全局变量,则向函数声明变量是一个好习惯。
也可以看看[[ $desc = (INT|TSTP) ]] || echo SIG$desc
。
通常,与其他 shell 一样,-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
}