当我在 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_CHARS
set 但不包含 ,&
结果是DIR/&
。使用ZLE_SPACE_SUFFIX_CHARS
set 以包含 ,&
结果是DIR &
。请注意,某些补全可能会提供其自己的后缀删除或替换行为,从而覆盖此处描述的值。