Comment empêcher zsh de manger de l'espace avant le symbole de la pipe?

17

Lorsque je tape un espace suivi du symbole de tuyau '|'sur la ligne de commande zsh, zsh mange l'espace, en plaçant le symbole de tuyau directement contre le mot précédent. Comment puis-je l'empêcher de faire ça? Je ne suis pas sûr des conventions stylistiques possibles, mais j'aime un espace des deux côtés du symbole de tuyau pour plus de lisibilité. J'utilise oh-my-zsh à peu près hors de la boîte.

Solution

Sur la base de la réponse de mpy ci-dessous, j'ai utilisé la solution suivante:

Par défaut, ZLE_REMOVE_SUFFIX_CHARS n'est pas défini dans zsh / ohmyzsh. Lorsqu'elle n'est pas définie, elle agit comme si elle était:

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

J'ai ajouté la définition suivante à mon ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(tous sauf pipe) et hop, parfait! problème disparu.

scanny
la source
1
essayez à nouveau de faire ceci en utilisant zsh -f(pour sauter le chargement de votre configuration). Vous remarquerez que zsh ne fera plus cela. Ensuite, vous devrez creuser (très probablement) dans oh-my-zsh pour comprendre comment cela provoque cela ;-)
Francisco

Réponses:

17

Je suppose que vous voulez dire que lorsque vous TABterminez une commande / un nom de fichier, un espace est ajouté automatiquement, mais après l'avoir pressé, |il disparaît à nouveau. Sinon, je ne peux pas reproduire cet effet.

Cependant, dans ce cas, la solution doit être aussi simple que

ZLE_REMOVE_SUFFIX_CHARS=""

L'explication est un peu délicate, donc je cite simplement man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Ces paramètres sont utilisés par l'éditeur de ligne. Dans certaines circonstances, les suffixes (généralement l'espace ou la barre oblique) ajoutés par le système d'achèvement seront supprimés automatiquement, soit parce que la prochaine commande d'édition n'était pas un caractère insérable, soit parce que le caractère a été marqué comme nécessitant la suppression du suffixe.

Ces variables peuvent contenir les jeux de caractères qui entraîneront la suppression du suffixe. Si ZLE_REMOVE_SUFFIX_CHARS est défini, ces caractères entraîneront la suppression du suffixe; si ZLE_SPACE_SUFFIX_CHARSest défini, ces caractères entraîneront la suppression du suffixe et son remplacement par un espace.

Si ZLE_REMOVE_SUFFIX_CHARSn'est pas défini, le comportement par défaut équivaut à:

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

Si ZLE_REMOVE_SUFFIX_CHARSest défini mais vide, aucun caractère n'a ce comportement. ZLE_SPACE_SUFFIX_CHARS a priorité, de sorte que les éléments suivants:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

provoque les caractères &et |supprime le suffixe mais le remplace par un espace.

Pour illustrer la différence, supposons que l'option AUTO_REMOVE_SLASHest en vigueur et que le répertoire DIR vient d'être terminé, avec une annexe /, à la suite de laquelle l'utilisateur tape &. Le résultat par défaut est DIR&. Avec ZLE_REMOVE_SUFFIX_CHARSset mais sans inclure &le résultat est DIR/&. Avec l' ZLE_SPACE_SUFFIX_CHARSensemble pour inclure &le résultat est DIR &.

Notez que certains compléments peuvent fournir leur propre comportement de suppression ou de remplacement de suffixe qui remplace les valeurs décrites ici.

mpy
la source
Oui, je ne l'avais pas remarqué jusqu'à ce que vous en parliez, mais cela ne se produit qu'après une tabulation, merci pour la réponse, cela me donne ce dont j'ai besoin :)
scanny