Zsh 有一些与完成相关的自动化功能,在大多数情况下都很好:按 后Tab,会自动插入一个空格(或其他一些适当的字符,例如,
大括号内)。
我想保留此功能,但有一种情况除外:当我输入&
或|
按下 后Tab,我不希望删除空格。我更喜欢删除 上的空格,并且我绝对希望在按下括号枚举;
时抑制自动插入的逗号。Tab }
默认情况下,此功能在“旧”( compctl
) 和“新” ( compadd
) 完成系统中均有效。我只对新系统感兴趣。
如何调整完成插入的自动后缀的自动抑制?
答案1
此功能可以通过以下方式进行调整ZLE_REMOVE_SUFFIX_CHARS
和ZLE_SPACE_SUFFIX_CHARS
外壳参数。
如果
ZLE_REMOVE_SUFFIX_CHARS
设置了该变量,则它应该包含一组字符,在键入这些字符时,将导致自动完成的后缀被删除。如果ZLE_REMOVE_SUFFIX_CHARS
未设置,则默认行为相当于ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
对于 suffices 中设置的字符,
ZLE_SPACE_SUFFIX_CHARS
将替换为空格。它也优先于ZLE_SPACE_SUFFIX_CHARS
因此,为了获得您想要的行为,设置应该足以
ZLE_SPACE_SUFFIX_CHARS=$'|&'
似乎,
在键入 时,自动插入的大括号枚举总是被删除}
。
尽管zshparam(1)
提到某些完成系统可能会覆盖此行为,但它似乎与“新” compsys
(您称之为compadd
)一起工作得很好