GNU/Linux >> Linux Esercitazione >  >> Linux

Primi caratteri del comando ripetuti sul display durante il completamento?

I primi due caratteri sono stati ripetuti mentre uso Tab fare il completamento. Nello screenshot qui sotto, cd si ripete.

Ho provato rxvt-unicdoe, xterm, terminator. Tutti questi emulatori di terminale hanno questo problema.

Zsh versione 5.0.2, file di configurazione su-my-zsh

Risposta accettata:

Se i caratteri sulla riga di comando a volte vengono visualizzati con un offset, ciò è spesso dovuto al fatto che zsh ha calcolato la larghezza errata per il prompt. I sintomi sono che il display ha un bell'aspetto finché aggiungi caratteri o sposti carattere per carattere ma diventa confuso (con alcuni caratteri che appaiono più a destra di quanto dovrebbero) quando usi altri comandi che spostano il cursore (Home , completamento, ecc.) o quando il comando si sovrappone a una seconda riga.

Zsh ha bisogno di conoscere la larghezza del prompt per sapere dove sono posizionati i caratteri del comando. Presuppone che ogni personaggio occupi una posizione se non diversamente indicato.

Una possibilità è che il tuo prompt contenga sequenze di escape che non sono opportunamente delimitati. Le sequenze di escape che cambiano il colore o altri aspetti della formattazione del testo, o che cambiano il titolo della finestra o altri effetti, hanno larghezza zero. devono essere inclusi in un costrutto parentesi graffe %{…%} . Più in generale, una sequenza di escape come %42{…%} dice a zsh di presumere che ciò che è tra parentesi graffe sia largo 42 caratteri.

Quindi controlla le impostazioni del prompt (PS1 , PROMPT , o le variabili a cui fanno riferimento) e assicurati che tutte le sequenze di escape (come \e[…m per modificare gli attributi del testo: nota che potrebbe essere presente tramite alcune variabili come $fg[red] ) sono all'interno di %{…%} . Dato che stai usando oh-my-zsh, controlla sia le tue impostazioni che le definizioni che stai usando da oh-my-zsh.

Lo stesso problema si pone in bash. Le sequenze di larghezza zero in un prompt devono essere racchiuse in \[…\] .

Un'altra possibilità è che il tuo prompt contenga caratteri non ASCII e che zsh (o qualsiasi altra applicazione) e il tuo terminale abbiano un'idea diversa di quanto siano larghi. Questo può accadere se c'è una mancata corrispondenza tra la codifica del tuo terminale e la codifica dichiarata nella shell, e le due codifiche risultano in larghezze diverse per determinate sequenze di byte. In genere potresti riscontrare questo problema quando utilizzi un terminale non Unicode ma dichiari una locale Unicode o viceversa.

Le applicazioni si basano su variabili di ambiente per conoscere la locale; l'impostazione pertinente è LC_CTYPE , che è determinato dalle variabili di ambiente LANGUAGE , LC_ALL , LC_CTYPE e LANG (si applica il primo di questi impostato). Il comando locale | grep LC_CTYPE ti dice la tua impostazione attuale. Di solito il modo migliore per evitare problemi di localizzazione è lasciare che l'emulatore di terminale imposti LC_CTYPE , poiché sa quale codifica si aspetta; ma se non funziona per te, assicurati di impostare LC_CTYPE .

Gli stessi sintomi possono verificarsi quando il comando precedente mostrava dell'output che non terminava con una nuova riga, in modo che il prompt venga visualizzato nel mezzo della riga ma la shell non se ne accorge. In questo caso ciò accadrebbe solo dopo aver eseguito un tale comando, non in modo persistente.

Correlati:reindirizzamento IO e comando head?

Se una riga non viene visualizzata correttamente, il comando redisplay o clear-screen (legato a Ctrl +L per impostazione predefinita) lo risolverà.


Linux
  1. Comando ls di Linux

  2. Come aggiungere un'icona al prompt di bash

  3. Genera la distribuzione delle dimensioni dei file dal prompt dei comandi

  4. Come cambiare rapidamente la prima parola in un comando Bash?

  5. Come reindirizzare l'output di un comando a un file quando il comando richiederà gli input dell'utente?

Come utilizzare il comando hostname in Linux

Aggiungi ai preferiti i comandi di Linux per un'invocazione ripetuta più semplice

Cambiare il colore del testo dell'output al prompt dei comandi?

Usare il comando tr in Linux per giocare con i personaggi

Come impostare il colore del prompt dei comandi in Bash?

Perché slabtop -o restituisce solo le prime 23 righe quando il comando viene reindirizzato?