La ricerca della cronologia inversa in bash seguita dai tasti freccia provoca la visualizzazione del cursore nella posizione errata


10

Ho notato che molte volte quando sto cercando la cronologia inversa dalla riga di comando tramite CTRL+ r, se voglio modificare il comando, a volte il cursore salta nella posizione sbagliata quando premo un tasto freccia o invio CTRL+ ao CTRL+ e. La posizione specifica in cui salta sembra essere un offset uguale alla dimensione del mio prompt della riga di comando impostato PS1.

Ciò causa difficoltà perché la posizione effettiva del cursore è diversa da quella visualizzata sullo schermo; le modifiche future al comando vengono visualizzate come se il cursore si trovasse nel punto in cui è saltato, ma il comando effettivo mantiene la posizione corretta senza alcun salto.

Qualcuno sa cosa sta causando questo o come risolverlo?

EDIT: Se aggiungo una nuova riga alla fine del PS1problema sembra andare via. Tuttavia, preferirei immettere il comando sulla stessa riga del prompt.

Risposte:


6

Questo è spesso causato da comandi nella tua cronologia che sono più lunghi di 1 riga. Quando selezioni un elemento più corto fuori dalla cronologia, non sembra prendere in considerazione la larghezza del prompt nel ripetere il rendering della riga di comando, quindi tutto ciò che segue quel lungo comando è complicato.

La soluzione semplice che ho trovato è premere il tasto Home, inserire "eco" e premere invio. Quindi richiama l'ultimo comando e modifica da lì. (Prima di rimuovere l'eco. :)


Grazie, in realtà ci ho provato poco fa. Nel mio caso sono stato incurante e ho spazzato via un file perché c'era un tubo nel comando che ha ingoiato l'eco. Hai ragione, questo sembra influenzare solo i comandi lunghi secondo la mia sperimentazione.
jonderry,

Una soluzione migliore dell'eco che ho appena trovato: aggiungi un '#' all'inizio della riga anziché un'eco. In questo modo bash tratta l'intera riga come un commento.
jonderry,

1
Ancora meglio: il problema sembra scomparire se la linea corrente viene ridisegnata. Cl per cancellare lo schermo e ridisegnare la riga corrente o creare un'associazione chiave per la funzione non ridisegnata redraw-current-line.
jonderry,

Ho dimenticato di menzionare la soluzione Cl poiché odio davvero perdere il buffer di scorrimento, ma sì, è un problema di rendering temporaneo dalla navigazione della cronologia, quindi forzare un redraw lo risolverà. la linea della corrente ridisegnata suona come una soluzione ancora migliore!
Cabbey,

13

Forse hai sequenze di escape non stampabili in PS1 non racchiuse tra \ [e \].

Assicurati di averli chiusi tutti in questo modo:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
Funziona alla grande se racchiudi solo le sequenze non stampabili in ( \[e \]quindi hai bisogno di più gruppi di queste virgolette)
Andomar
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.