我有一个 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
.
我能做些什么?
聚苯乙烯如果我可以使用变量选择整个缓冲区,那将是一次很好的学习经历MARK
。
答案1
在小部件代码,您不仅可以读取还可以修改MARK
、CURSOR
、BUFFER
等变量。
要将光标移动到缓冲区末尾:
CURSOR=$#BUFFER
要选择整个缓冲区,标记位于开头,光标位于末尾,您不需要调用任何小部件:只需设置适当的变量即可。
function _ctrl-a {
MARK=0
CURSOR=$#BUFFER
REGION_ACTIVE=1
}