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


17

Quando digito um espaço seguido pelo símbolo '|'de barra vertical na linha de comando zsh, zsh ocupa o espaço, colocando o símbolo de barra diretamente contra a palavra anterior. Como eu paro de fazer isso? Não tenho certeza sobre possíveis convenções estilísticas, mas gosto de um espaço nos dois lados do símbolo de tubulação para facilitar a leitura. Estou usando o oh-my-zsh praticamente fora da caixa.

Solução

Com base na resposta do 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;&|'

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

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(todos exceto cachimbo) e pronto, perfeito! problema se foi.


1
primeiro tente fazer isso usando zsh -f(para pular o carregamento da sua configuração). Você notará que o zsh não fará mais isso. Então, você vai ter que cavar (mais provável) em oh-meu-zsh para descobrir como ele está causando que ;-)
Francisco

Respostas:


17

Suponho que você queira dizer que quando você TAB concluir um comando / nome de arquivo, um espaço é adicionado automaticamente, mas depois de pressionado, |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 simplesmente cito man zshparam

ZLE_REMOVE_SUFFIX_CHARS / ZLE_SPACE_SUFFIX_CHARS Estes parâmetros são usados ​​pelo editor de linha. Em certas circunstâncias, os sufixos (normalmente espaço ou barra) adicionados pelo sistema de conclusão serão removidos automaticamente, porque o próximo comando de edição não era um caractere inserível ou porque o caractere foi marcado como requerendo a remoção do sufixo.

Essas variáveis ​​podem conter os conjuntos de caracteres que farão com que o sufixo seja removido. Se ZLE_REMOVE_SUFFIX_CHARS estiver definido, esses caracteres farão com que o sufixo seja removido; E seZLE_SPACE_SUFFIX_CHARS estiver definido, esses caracteres farão com que o sufixo seja removido e substituído por um espaço.

Se ZLE_REMOVE_SUFFIX_CHARSnão estiver definido, o comportamento padrão será equivalente a:

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

Se ZLE_REMOVE_SUFFIX_CHARSestiver definido, mas estiver vazio, nenhum caractere terá esse comportamento. ZLE_SPACE_SUFFIX_CHARS tem precedência, para que o seguinte:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

causa os caracteres &e |remove o sufixo, mas substitui-o por um espaço.

Para ilustrar a diferença, suponha que a opção AUTO_REMOVE_SLASHesteja em vigor e o diretório DIR tenha sido concluído, com um anexo /, após o qual o usuário digita &. O resultado padrão é DIR&. Com ZLE_REMOVE_SUFFIX_CHARSconjunto, mas sem incluir &o resultado é DIR/&. Com ZLE_SPACE_SUFFIX_CHARSdefinido para incluir &o resultado é DIR &.

Observe que certas conclusões podem fornecer seu próprio comportamento de remoção ou substituição de sufixo, que substitui os valores descritos aqui.


Sim, eu não tinha notado que até que você mencionou, mas isso só acontece depois de um guia-conclusão, obrigado pela resposta, isso me dá o que eu preciso :)
scanny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.