zsh中某些字符完成后保留空格

zsh中某些字符完成后保留空格

Zsh 有一些与完成相关的自动化功能,在大多数情况下都很好:按 后Tab,会自动插入一个空格(或其他一些适当的字符,例如,大括号内)。

我想保留此功能,但有一种情况除外:当我输入&|按下 后Tab,我不希望删除空格。我更喜欢删除 上的空格,并且我绝对希望在按下括号枚举;时抑制自动插入的逗号。Tab }

默认情况下,此功能在“旧”( compctl) 和“新” ( compadd) 完成系统中均有效。我只对新系统感兴趣。

如何调整完成插入的自动后缀的自动抑制?

答案1

此功能可以通过以下方式进行调整ZLE_REMOVE_SUFFIX_CHARSZLE_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)一起工作得很好

相关内容