La storia di zsh (o forse oh-my-zsh) viene confusa con i comandi multi-line

se uso la freccia in su in una session di zsh, come ti aspetteresti get comandi precedenti, dal più recente al più vecchio. Ora (se è zsh o oh-my-zsh che fa questo non lo so), ma se scrivo l'inizio di una linea e colpisco la freccia in su, ottengo le righe dalla mia storia che iniziano con quello che ho digitato. Finora tutto buono.

Il problema si verifica se inserisco un command a più righe, ad esempio:

for i in foo bar echo $i 

quindi se dopo aver colpito la freccia su, quando arriverà al command a più righe, visualizzerò solo i risultati che iniziano con. Quindi, se la mia storia è come:

 touch foo rm foo for i in foo bar echo $i ls 

e ho colpito la freccia in su che ottengo il command ls poi la linea multi-line for command, e da allora in poi vedo solo for comandi che sono nella mia storia, piuttosto che i comandi rm o touch .

C'è un modo per cercare in modo cronologico senza bloccarsi each volta che la storia arriva a un command a più righe?

Il comportmento descritto è dovuto all'uso di up-line-or-search , che si sposterà attraverso la row di un command e nella prima row di un command che cercherà nella cronologia per le righe che iniziano con la prima parola.

Spiegazione del problema: a partire da una row vuota, qualsiasi row della storia corrisponderà. Fintanto che vengono trovati solo comandi singolo, non c'è differenza di comportmento con l' up-history o l' up-line-or-history . Ma quando si raggiunge un command a più righe, non è più in cerca, ma passando attraverso le righe. Quando viene raggiunta la row superiore, inizia una nuova ricerca, ma ora sta cercando la prima parola in questa row invece di continuare la vecchia ricerca di qualsiasi row.

Per impostazione predefinita, viene mappata l' up-line-or-history , che va indietro attraverso le voci di cronologia e in caso di comandi multi-line attraverso each row. up-history potrebbe anche passare attraverso la storia ma trattare i comandi multi-line, proprio come quelli a una row. Entrambi forniranno il comportmento previsto.

Ti suggerisco di cercare la tua configuration zsh e Oh-my-ZSH per where è associata la up-line-or-search e sostituirla con l' up-line-or-history o eliminare il binding come up-line-or-history è la comunque.

Inoltre, a seconda del terminal utilizzato, le sequenze di tasti per Up sono ^[OA o ^[[A Per get il comportmento consisteno dalla shell, entrambi dovrebbero essere impostati sugli stessi comandi.