Mantenha o espaço após a conclusão de alguns caracteres em zsh

7

O Zsh tem um pouco de automação relacionada à conclusão que é legal na maioria das vezes: depois de pressionar Tab , um espaço é inserido automaticamente (ou algum outro caractere apropriado, como , entre chaves).

Eu quero manter esse recurso, exceto em um caso: quando eu digito & ou | depois de pressionar Tab , não quero que o espaço seja removido. Eu prefiro o espaço a ser removido em um ; , e eu definitivamente quero suprimir a vírgula automaticamente inserida ao pressionar Tab } em uma enumeração de chave.

Esse recurso funciona por padrão nos sistemas de conclusão "antigo" ( compctl ) e "novo" ( compadd ). Estou interessado apenas no novo sistema.

Como posso ajustar a supressão automática do sufixo automático inserido por conclusão?

    
por Gilles 17.12.2014 / 10:32

1 resposta

8

Esse recurso pode ser ajustado com ZLE_REMOVE_SUFFIX_CHARS e ZLE_SPACE_SUFFIX_CHARS parâmetros da shell.

  • Se a variável ZLE_REMOVE_SUFFIX_CHARS estiver definida, ela deverá conter um conjunto de caracteres que, quando digitado, fará com que os sufixos automáticos do preenchimento sejam removidos. Se ZLE_REMOVE_SUFFIX_CHARS não estiver definido, o comportamento padrão será igual a

    ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
    
  • Os caracteres definidos em ZLE_SPACE_SUFFIX_CHARS suffices são substituídos por um espaço. Ele também tem precedência sobre ZLE_SPACE_SUFFIX_CHARS

Assim, para obter o comportamento desejado, deve ser suficiente definir

ZLE_SPACE_SUFFIX_CHARS=$'|&'

Parece que as , inseridas automaticamente nas enumerações de chave são sempre removidas ao digitar } .

Embora zshparam(1) mencione que certos sistemas de completação podem sobrescrever este comportamento, parece funcionar muito bem com o "novo" compsys (você o chamou compadd )

    
por 17.12.2014 / 11:43