Risposte:
^ M di solito appare quando il file non è coerente rispetto ai terminatori di linea utilizzati. Prova quanto segue:
testfile
usando vim con poche righe casuali e scrivilo in modalità dos.Quindi esegui (spero che tu abbia installato cygwin):
sed '2s/.$//' testfile > corruptfile
Ciò rimuoverà l'ultimo carattere della seconda riga, creando un'incoerenza nei terminatori di riga utilizzati.
corruptfile
con vim. ^ Verranno visualizzati i simboli M in modo da renderti consapevole dell'incongruenza.Nella vita reale, i programmi che sono stati scritti pensando a un solo tipo di terminatore di riga possono produrre tali incoerenze. Mentre queste incoerenze sembrano innocenti, possono causare problemi con altri programmi. Ad esempio, sovversione non consente l'aggiunta di file con terminatori di riga incoerenti a un repository. Altri programmi potrebbero semplicemente fallire silenziosamente.
Per far sparire ^ M basta fare una sostituzione globale:
:% s/^M//g
Il ^M
è prodotto premendo:Ctrl+v <Enter>
Quindi riscrivere il file nel formato desiderato:
:set ff=dos
:w
e: filenam<tab>
e aspetto che Vim sia stato digitato filenam
, Vim non viene completato.
CRLF
linee. Ma non ha trovato tali righe.
hexdump -c
che tutte le righe del tuo file utilizzano lo stesso terminatore di riga? Un oneliner per questo sarebbe sed -e 's/[[:print:]]*//g' file | hexdump -c
. Con un file coerente, lo stesso modello di caratteri di terminazione di riga verrà ripetuto sull'output. (scusate il gergo unix :-))
Il carattere che vim viene visualizzato come ^ M è CR
(ritorno a capo, carattere ASCII 13). Windows utilizza sia CR
e LF
(nuova riga, carattere ASCII 10) per codificare le interruzioni di riga nei file di testo. Linux / Unix usano solo LF
per codificare le interruzioni di riga e solo Mac OS usa CR
.
Se si apre un file di testo creato su un computer Windows su una casella Linux, è possibile che vengano visualizzati CR
caratteri finali in ogni riga. Esistono diversi modi per rimuoverli. Uno è di sostituirli in vim come suggerito m000, un altro sarebbe al recode
file:
recode ibmpc..latin1 SOME.TXT
LF
senza CR
. Vedi questa risposta a una domanda simile su StackTranslate.it.
CR
quando almeno una riga usa solo LF
, vedi il mio altro commento sopra.