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

Gil*_*il' 7 zsh autocomplete line-editor

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

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

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

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

Ada*_*hon 9

此功能可以使用ZLE_REMOVE_SUFFIX_CHARSZLE_SPACE_SUFFIX_CHARSshell 参数进行调整。

  • 如果ZLE_REMOVE_SUFFIX_CHARS设置了变量,它应该包含一组字符,当输入这些字符时,会导致自动完成后缀被删除。如果ZLE_REMOVE_SUFFIX_CHARS未设置,则默认行为等同于

    ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
    
    Run Code Online (Sandbox Code Playgroud)
  • 对于设置在ZLE_SPACE_SUFFIX_CHARS足够的字符被替换为空格。它也优先于ZLE_SPACE_SUFFIX_CHARS


因此,为了获得您想要的行为,应该足以设置

ZLE_SPACE_SUFFIX_CHARS=$'|&'
Run Code Online (Sandbox Code Playgroud)

似乎,在键入时总是删除自动插入大括号枚举中}

尽管zshparam(1)提到某些完成系统可能会覆盖此行为,但它似乎与“新” compsys(您称之为compadd)一起工作得很好