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


18

当我'|'在zsh命令行上键入一个空格并在其后加上管道符号时,zsh会占用该空间,将管道符号直接放在前一个单词的上方。我该如何阻止它呢?我不确定任何可能的样式约定,但是我喜欢在管道符号两侧增加一个空格以提高可读性。我开箱即用了oh-my-zsh。

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

默认情况下,在zsh / ohmyzsh中未定义ZLE_REMOVE_SUFFIX_CHARS。未定义时,它的行为就像是:

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

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

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(除了烟斗外)和presto,非常完美!问题不见了。


1
首先重试使用zsh -f(跳过加载配置)。您会注意到zsh不再这样做了。然后,您将不得不(最有可能)深入研究oh-my-zsh以找出它是如何造成的;-)
Francisco

Answers:


18

我想您的意思是,当您TAB完成命令/文件名时,会自动添加一个空格,但是在按下|该空格后又会消失。否则我无法再现这种效果。

但是,在这种情况下,解决方案应尽可能简单

ZLE_REMOVE_SUFFIX_CHARS=""

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

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

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

如果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_CHARS集,但不包括&结果DIR/&。随着ZLE_SPACE_SUFFIX_CHARS设置为包括&结果DIR &

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


是的,直到您提到它,我才注意到它,但是它仅在制表符完成后才会发生,感谢您的回答,这给了我我所需要的东西:)
scanny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.