当我'|'在 zsh 命令行上键入一个空格后跟管道符号时,zsh 会占用空间,将管道符号直接放在前面的单词上。我如何阻止它这样做?我不确定任何可能的风格约定,但我喜欢管道符号两侧的空格以提高可读性。我几乎开箱即用地使用 oh-my-zsh。
解决方案
根据下面mpy的回答,我使用了以下解决方案:
默认情况下,zsh/ohmyzsh 中未定义 ZLE_REMOVE_SUFFIX_CHARS。未定义时,它的行为就像:
ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
Run Code Online (Sandbox Code Playgroud)
我在 ~/.zshrc 中添加了以下定义:
ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'
Run Code Online (Sandbox Code Playgroud)
(所有管道除外)和快速,完美!问题消失了。
mpy*_*mpy 22
我想你的意思是当你TAB完成一个命令/文件名时,一个空格会自动添加,但在按下|它后又消失了。否则我无法重现这种效果。
但是,在这种情况下,解决方案应该很简单
ZLE_REMOVE_SUFFIX_CHARS=""
Run Code Online (Sandbox Code Playgroud)
解释有点棘手,所以我简单地引用 man zshparam
ZLE_REMOVE_SUFFIX_CHARS/ZLE_SPACE_SUFFIX_CHARS这些参数由行编辑器使用。在某些情况下,补全系统添加的后缀(通常是空格或斜线)将被自动删除,要么是因为下一个编辑命令不是可插入的字符,要么是因为该字符被标记为需要删除后缀。这些变量可以包含将导致后缀被删除的字符集。如果
ZLE_REMOVE_SUFFIX_CHARS设置,这些字符将导致后缀被删除;如果ZLE_SPACE_SUFFIX_CHARS设置,这些字符将导致后缀被删除并替换为空格。如果
ZLE_REMOVE_SUFFIX_CHARS未设置,则默认行为等效于:Run Code Online (Sandbox Code Playgroud)ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'如果
ZLE_REMOVE_SUFFIX_CHARS设置但为空,则没有字符具有此行为。ZLE_SPACE_SUFFIX_CHARS优先,因此:Run Code Online (Sandbox Code Playgroud)ZLE_SPACE_SUFFIX_CHARS=$'&|'导致字符
&并|删除后缀但用空格替换它。为了说明差异,假设该选项
AUTO_REMOVE_SLASH有效并且目录 DIR 刚刚完成,并附加了一个/,用户在其后键入&. 默认结果是DIR&。随着ZLE_REMOVE_SUFFIX_CHARS集,但不包括&结果DIR/&。随着ZLE_SPACE_SUFFIX_CHARS设置为包括&结果DIR &。请注意,某些完成可能会提供自己的后缀删除或替换行为,这些行为会覆盖此处描述的值。