如何阻止 zsh 占用管道符号前的空间?

如何阻止 zsh 占用管道符号前的空间?

当我在 zsh 命令行上输入空格后跟管道符号时'|',zsh 会占用该空格,将管道符号直接放在前一个单词旁边。我该如何阻止它这样做?我不确定任何可能的风格惯例,但我喜欢在管道符号两侧留一个空格以提高可读性。我几乎开箱即用地使用 oh-my-zsh。

解决方案

根据下面 mpy 的回答,我使用了以下解决方案:

默认情况下,ZLE_REMOVE_SUFFIX_CHARS 在 zsh/ohmyzsh 中未定义。未定义时,其行为如下:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

我在 ~/.zshrc 中添加了以下定义:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(除管道外)瞧,完美!问题解决了。

答案1

我猜你的意思是当你TAB完成一个命令/文件名时会自动添加一个空格,但按下后|它又消失了。否则我无法重现那个效果。

然而,在这种情况下,解决方案应该很简单

ZLE_REMOVE_SUFFIX_CHARS=""

解释有点棘手,所以我只是引用man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ZLE_SPACE_SUFFIX_CHARS 这些参数由行编辑器使用。在某些情况下,完成系统添加的后缀(通常是空格或斜线)将被自动删除,因为下一个编辑命令不是可插入字符,或者因为该字符被标记为需要删除后缀。

这些变量可以包含将导致后缀被删除的字符集。如果 ZLE_REMOVE_SUFFIX_CHARS 设置了,这些字符将导致后缀被删除;如果ZLE_SPACE_SUFFIX_CHARS设置了,这些字符将导致后缀被删除并替换为空格。

如果ZLE_REMOVE_SUFFIX_CHARS未设置,则默认行为相当于:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

如果ZLE_REMOVE_SUFFIX_CHARS设置了但是为空,则没有字符具有此行为。 ZLE_SPACE_SUFFIX_CHARS 优先,因此以下内容:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

导致字符&|删除后缀但是用空格替换它。

为了说明差异,假设选项AUTO_REMOVE_SLASH有效,目录 DIR 刚刚完成,附加了/,随后用户输入&。默认结果是DIR&。使用 ZLE_REMOVE_SUFFIX_CHARSset 但不包含 ,&结果是DIR/&。使用ZLE_SPACE_SUFFIX_CHARSset 以包含 ,&结果是DIR &

请注意,某些补全可能会提供其自己的后缀删除或替换行为,从而覆盖此处描述的值。

相关内容