如何使用 zle 小部件选择整个缓冲区?

如何使用 zle 小部件选择整个缓冲区?

我有一个 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

小部件代码,您不仅可以读取还可以修改MARKCURSORBUFFER等变量。

要将光标移动到缓冲区末尾:

CURSOR=$#BUFFER

要选择整个缓冲区,标记位于开头,光标位于末尾,您不需要调用任何小部件:只需设置适当的变量即可。

function _ctrl-a {
  MARK=0
  CURSOR=$#BUFFER
  REGION_ACTIVE=1
}

相关内容