我有一个zle小部件,如:
_ctrl-a() {
CURSOR=0
if ((MARK == 0)); then
zle set-mark-command
fi
if [ "$BUFFERLINES" -gt 1 ]; then
zle end-of-buffer-or-history
else
zle end-of-line
fi
}
zle -N _ctrl-a
bindkey '^A' _ctrl-a # Ctrl+A它选择整个缓冲区。我的意思是把光标放在缓冲区的开头,开始标记,然后把光标放在缓冲区的末尾。
在这里,用于多行命令的小部件是end-of-buffer-or-history,但是,我希望它是end-of-buffer。
因此,我想取代:
if [ "$BUFFERLINES" -gt 1 ]; then
zle end-of-buffer-or-history
else
zle end-of-line
fi使用
zle end-of-buffer但是似乎没有end-of-buffer的小部件。
我能做什么?
P.S.如果我可以使用MARK变量选择整个缓冲区,那将是一次很好的学习体验。
发布于 2023-06-01 17:41:20
在小部件代码中,不仅可以读取而且还可以修改变量,如MARK、CURSOR、BUFFER等。
若要将光标移动到缓冲区的末尾,请执行以下操作:
CURSOR=$#BUFFER要选择整个缓冲区,标记在开头,光标在末尾,您不需要调用任何小部件:只需设置适当的变量即可。
function _ctrl-a {
MARK=0
CURSOR=$#BUFFER
REGION_ACTIVE=1
}https://unix.stackexchange.com/questions/747715
复制相似问题