Come impedire a zsh di mangiare spazio prima del simbolo della pipa?


17

Quando scrivo uno spazio seguito dal simbolo della pipe '|'nella riga di comando di zsh, zsh mangia lo spazio, posizionando il simbolo della pipe direttamente contro la parola precedente. Come posso impedirlo? Non sono sicuro di possibili convenzioni stilistiche, ma mi piace uno spazio su entrambi i lati del simbolo della pipa per la leggibilità. Sto usando oh-my-zsh praticamente fuori dalla scatola.

Soluzione

Sulla base della risposta di mpy di seguito, ho usato la seguente soluzione:

Per impostazione predefinita, ZLE_REMOVE_SUFFIX_CHARS non è definito in zsh / ohmyzsh. Quando non definito, si comporta come se fosse:

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

Ho aggiunto la seguente definizione al mio ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(tutti tranne pipe) e presto, perfetto! problema andato.


1
prima prova di nuovo a farlo usando zsh -f(per saltare il caricamento della tua configurazione). Noterai che zsh non lo farà più. Quindi, dovrai scavare (molto probabilmente) in oh-my-zsh per capire come lo sta causando ;-)
Francisco,

Risposte:


17

Suppongo che intendi che quando TABcompleti un comando / nomefile viene aggiunto automaticamente uno spazio, ma dopo |averlo premuto svanisce di nuovo. Altrimenti non riesco a riprodurre quell'effetto.

Tuttavia, in tal caso la soluzione dovrebbe essere semplice come

ZLE_REMOVE_SUFFIX_CHARS=""

La spiegazione è un po 'complicata, quindi cito semplicemente man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Questi parametri sono utilizzati dall'editor di linea. In alcune circostanze i suffissi (in genere spazio o barra) aggiunti dal sistema di completamento verranno rimossi automaticamente, sia perché il comando di modifica successivo non era un carattere inseribile, sia perché il carattere era contrassegnato come richiedente la rimozione del suffisso.

Queste variabili possono contenere insiemi di caratteri che causeranno la rimozione del suffisso. Se ZLE_REMOVE_SUFFIX_CHARS impostato, quei caratteri causeranno la rimozione del suffisso; se ZLE_SPACE_SUFFIX_CHARSimpostato, quei caratteri causeranno la rimozione e la sostituzione del suffisso con uno spazio.

Se ZLE_REMOVE_SUFFIX_CHARSnon è impostato, il comportamento predefinito è equivalente a:

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

Se ZLE_REMOVE_SUFFIX_CHARSè impostato ma è vuoto, nessun personaggio ha questo comportamento. ZLE_SPACE_SUFFIX_CHARS ha la precedenza, in modo che quanto segue:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

causa i caratteri &e |rimuove il suffisso ma lo sostituisce con uno spazio.

Per illustrare la differenza, supponiamo che l'opzione AUTO_REMOVE_SLASHsia attiva e che la directory DIR sia stata appena completata, con un allegato /, a seguito del quale l'utente digita &. Il risultato predefinito è DIR&. Con ZLE_REMOVE_SUFFIX_CHARSset ma senza includere &il risultato è DIR/&. Con ZLE_SPACE_SUFFIX_CHARSset per includere &il risultato è DIR &.

Si noti che alcuni completamenti possono fornire il proprio comportamento di rimozione o sostituzione del suffisso che sovrascrive i valori qui descritti.


Sì, non l'avevo notato fino a quando non l'hai menzionato, ma succede solo dopo il completamento di una scheda, grazie per la risposta, questo mi dà ciò di cui ho bisogno :)
scanny
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.