Vedi le interruzioni di riga e i ritorni a capo nell'editor


180

Qualcuno conosce un editor di testo su Linux che mi permette di vedere le interruzioni di riga e i ritorni a capo? Vim supporta questa funzione?


1
NOTA: a volte newline ($) e ritorno a capo (^ M) sono nascosti in MOLTE combinazioni di colori, e anche durante l'utilizzo di putty in ssh.
Vanessa Sanchez,

1
OP Penso che dovresti riconsiderare la risposta selezionata. poiché la risposta selezionata non funziona. ma la risposta CaptSaltyJack funziona bene.
JavaSheriff,

OP Ciò che mostrerà ENTRAMBI è la soluzione di @arno. Avevo bisogno di vedere ENTRAMBI, perché ho un file a caso usando tutti e 3 i formati di file ... E la soluzione di arno funziona
Wayne Walker,

Risposte:


139

:set listin Vim mostrerà spazi bianchi. La fine delle righe viene visualizzata come " $" e i ritorni a capo vengono solitamente visualizzati come " ^M".



254
Inesatto, :set listNON mostrerà ^Mcaratteri (CR). Fornire l' -bopzione per vi / vim funzionerà. Oppure, una volta caricato vim, digitare::e ++ff=unix
CaptSaltyJack

15
Cordiali saluti, per disattivare la modalità "set list", utilizzare:set nolist
Tomofumi il

@Tomofumi sarà benvenuta una modifica con la tua posizione!
Pipo,

1
Risposta sbagliata. : l'elenco impostato NON mostrerà ^ M caratteri (CR). Utilizzare l'opzione -b per vi / vim funzionerà.
nanosoft,

265

In disaccordo con la risposta ufficiale:

:set listsarà non mostrare ^ M caratteri (CR). Fornire l'opzione -b a vi / vim funzionerà. Oppure, una volta caricato vim, digitare :e ++ff=unix.


4
È la sintassi. :help editspettacoli e[dit]! [++opt] [+cmd]. E :help ++edice che l'argomento [++ opt] può essere usato per forzare il valore di 'fileformat' [..] .
dennis,

19
solo per chiarire, :set listmostra newline ( $), :e ++ff=unixmostra CR ( ^M); se vuoi vedere entrambi, :set listallora:e ++ff=unix
Yibo Yang

5
Per espandere il commento di @Dennis, :set ff=unixdice a Vim di cambiare le terminazioni di linea in stile unix (come parte dell'impostazione del formato file), quindi i caratteri ^ M non ci sono più (e quindi non vengono visualizzati). :e ++ff=unixgli dice di impostare forzatamente il fileformat come unixsenza realmente cambiare il contenuto. Quindi Vim lo legge come un file Unix, vede i caratteri CR come extra e li visualizza come ^ M.
Sundar - Ripristina Monica il

2
Né ancora non funziona per me vimper qualche motivo ... Non intendo né -bopzione, né :e ++ff=unixquando dentro :(
RAM237

3
va bene, e ++ ff = unix ha funzionato. Ora come lo spengo?
Croo,

78

VI mostra nuove righe (carattere LF, codice x0A) mostrando il testo successivo nella riga successiva.

Utilizzare l' -binterruttore per la modalità binaria. Ad esempio vi -b filenameo vim -b filename --.

Mostrerà quindi i caratteri CR ( x0D), che normalmente non vengono utilizzati nei file in stile Unix, come caratteri ^M.


In genere non ho bisogno di vedere la fine della linea, perché lavoro principalmente in Unixambiente. Ma vorrei essere avvisato delle terminazioni di linea di tipo Windows se ce ne sono nel file. Mostrerà vi -b filenameo :set binarysemplicemente mostrerà ^Mse si tratta di un file di tipo Windows e nessun altro finale di riga altrimenti?
alpha_989,

31

Solo per chiarire perché :set listnon mostrerà i CR come ^Msenza e ++ff=unixe perché :set listnon ha nulla a che fare con quelli ^M.

Internamente quando Vim legge un file nel suo buffer, sostituisce tutti i caratteri di fine riga con la propria rappresentazione (chiamiamolo $). Per determinare quali caratteri devono essere rimossi, rileva innanzitutto in quale formato le terminazioni di riga sono memorizzate in un file. Se ci sono solo CRLF '\r\n'o solo CR '\r'o LF solo '\n'caratteri terminatori di riga, allora il 'fileformat'è impostato dos, mace unixrispettivamente.

Quando l' listopzione è impostata, Vim visualizza il $carattere quando si è verificata l'interruzione di linea, indipendentemente fileformatdall'opzione rilevata. Utilizza la propria rappresentazione interna delle interruzioni di riga ed è quello che mostra.

Ora, quando si scrive buffer sul disco, Vim inserisce i caratteri di fine riga in base alle fileformatopzioni rilevate, essenzialmente convertendo tutti gli interni $con caratteri appropriati. Se è fileformatsuccesso, unixallora scriverà semplicemente \nal posto della sua interruzione di riga interna.

Il trucco è forzare Vim a leggere un dosfile codificato come unixuno. L'effetto netto è che rimuoverà tutti \n's lasciando \r' s intatta e visualizzarli come ^M's nel buffer. L'impostazione :set listmostrerà inoltre le terminazioni di riga interne come $. Dopo tutto, vedi ^M$al posto delle dosinterruzioni di riga codificate.

Si noti inoltre che :set listnon ha nulla a che fare con mostrando ^Mdi. Puoi controllarlo da solo (assicurati di aver disabilitato l' listopzione prima) inserendo un singolo CR usando CTRL-Vseguito da Enterin modalità insert. Dopo aver scritto il buffer su disco e averlo riaperto, vedrai ^Mnonostante l' listopzione sia impostata su 0.

Puoi trovare ulteriori informazioni sui formati di file su http://vim.wikia.com/wiki/File_format o digitando :help 'fileformat'Vim.


11

Prova il seguente comando.

: imposta binario

In VIM, questo dovrebbe fare la stessa cosa che usare l'opzione della riga di comando "-b". Se lo metti nel tuo file di avvio (es. .Vimrc), sarà sempre a posto per te.

Su molti sistemi * nix, esiste un comando "dos2unix" o "unix2dos" che può elaborare il file e correggere eventuali problemi di fine riga sospetti. Se non ci sono problemi con le terminazioni di riga, i file non verranno modificati.


Sfortunatamente nel mio sistema (Ubuntu 16.04) set binarynon è lo stesso di vim -b filename.py. Qualche idea sul perché? Ho controllato helpe sembra che quello che dici sia generalmente corretto. Come faccio a capire perché è così?
alpha_989,

:e ++ff=unixmostra il ^Mcorretto e non lo mostra quando uso i unixfile di tipo .. Quindi suppongo che il problema sia risolto per ora ...
alpha_989

6

Ti consiglio di modificare il tuo file .vimrc, per eseguire un elenco di comandi. Modifica il tuo file .vimrc, in questo modo:

cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF

Quando esegui vim, i comandi in .vimrc vengono eseguiti e puoi vedere questo esempio:

My line with CRLF eol here ^M¶

2

usando cate -Apuoi vedere nuove linee come $, schede come^I
cat -A myfile


0

È possibile visualizzare le linee di interruzione utilizzando l' editor gedit .

Innanzitutto, se non hai installato:

sudo apt-get install gedit

Ora installa i plugin gedit :

sudo apt-get install gedit-plugins

e seleziona il plug-in Disegna spazi , entra in Preferenze e scegli Disegna nuove linee

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Utilizzando VSCode è possibile installare l' estensione di terminazioni di linea .

Sublime Text 3 ha un plugin chiamato RawLineEdit che visualizzerà le terminazioni di riga e consentirà l'inserimento di tipi di terminazione di riga arbitrari

shift + ctrl + p e inizia a digitare il nome del plugin e attiva / disattiva per mostrare la fine della linea.

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.