禁用 zsh 中的辅助提示符

禁用 zsh 中的辅助提示符

当您在按 Enter 之前没有在 zsh 中正确完成引用或复杂命令时,系统会提示您使用 PS2 定义的辅助提示来完成它,例如>

有什么办法可以禁用辅助提示吗?我并不是指改变 PS2 设置,而是关闭整个功能。我在选项中找不到一个。

对我来说,第二个提示的出现更有可能是由于我的错误,而不是由于实际上想要继续该命令。因此,语法错误比辅助提示更有用,特别是当辅助提示出现时您无法立即返回到原始行。

(当我确实需要输入多行命令时,我可以使用 Shift+Enter 插入换行符。与辅助提示符不同,zsh 行编辑器允许在这种情况下返回到上一行。)

答案1

可能有一种更干净、更可靠的方法来做到这一点,但作为黑客,你可以这样做:

accept-line() {
  {
    unfunction _al_f_
    functions[_al_f_]=$BUFFER
  } 2> /dev/null
  if (( $+functions[_al_f_] )); then
    zle .$WIDGET
  else
    zle beep
    zle -M "Command unfinished or invalid."
  fi
}
zle -N accept-line

(如果需要,请对其他接受线路的小部件重复此操作)。

也就是说,在 上accept-line,尝试定义一个以编辑缓冲区为主体的函数,如果失败,则向用户报告错误而不是接受该行。

请注意,别名不会在分配给 时展开functions[_al_f_],因此如果您有一个修改语法的别名(例如 a )alias not_before=until,则会导致问题发生。

答案2

有一个 zsh 插件可以禁用辅助提示:https://github.com/romkatv/zsh-no-ps2。如果当前键入的命令格式正确,则按Enter会照常执行它。否则它会插入换行符。

免责声明:我是这个插件的作者。

相关内容