Como parar o zsh de comer espaço antes do símbolo do tubo?

11

Quando eu digito um espaço seguido pelo símbolo do pipe '|' na linha de comando zsh, o zsh come o espaço, colocando o símbolo do pipe diretamente acima da palavra anterior. Como eu paro de fazer isso? Não tenho certeza sobre quaisquer convenções estilísticas possíveis, mas gosto de um espaço em ambos os lados do símbolo do tubo para facilitar a leitura. Eu estou usando oh-my-zsh praticamente fora da caixa.

Solução

Com base na resposta de mpy abaixo, usei a seguinte solução:

Por padrão, ZLE_REMOVE_SUFFIX_CHARS é indefinido em zsh / ohmyzsh. Quando indefinido, age como se fosse:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Eu adicionei a seguinte definição ao meu ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(todos exceto pipe) e pronto, perfeito! problema desaparecido.

    
por scanny 30.06.2013 / 01:06

1 resposta

11

Suponho que você queira dizer que quando você TAB conclui um comando / nome de arquivo, um espaço é adicionado automaticamente, mas depois de pressionar | ele desaparece novamente. Caso contrário, não posso reproduzir esse efeito.

No entanto, nesse caso, a solução deve ser tão simples quanto

ZLE_REMOVE_SUFFIX_CHARS=""

A explicação é um pouco complicada, então eu simplesmente cito man zshparam

ZLE_REMOVE_SUFFIX_CHARS / ZLE_SPACE_SUFFIX_CHARS These parameters are used by the line editor. In certain circumstances suffixes (typically space or slash) added by the completion system will be removed automatically, either because the next editing command was not an insertable character, or because the character was marked as requiring the suffix to be removed.

These variables can contain the sets of characters that will cause the suffix to be removed. If ZLE_REMOVE_SUFFIX_CHARS is set, those characters will cause the suffix to be removed; if ZLE_SPACE_SUFFIX_CHARS is set, those characters will cause the suffix to be removed and replaced by a space.

If ZLE_REMOVE_SUFFIX_CHARS is not set, the default behaviour is equivalent to:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

If ZLE_REMOVE_SUFFIX_CHARS is set but is empty, no characters have this behaviour. ZLE_SPACE_SUFFIX_CHARS takes precedence, so that the following:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

causes the characters & and | to remove the suffix but to replace it with a space.

To illustrate the difference, suppose that the option AUTO_REMOVE_SLASH is in effect and the directory DIR has just been completed, with an appended /, following which the user types &. The default result is DIR&. With ZLE_REMOVE_SUFFIX_CHARS set but without including & the result is DIR/&. With ZLE_SPACE_SUFFIX_CHARS set to include & the result is DIR &.

Note that certain completions may provide their own suffix removal or replacement behaviour which overrides the values described here.

    
por 30.06.2013 / 14:51

Tags