Se apro i file che ho creato in Windows, le linee finiscono tutte ^M
.
Come posso eliminare tutti questi caratteri contemporaneamente?
Se apro i file che ho creato in Windows, le linee finiscono tutte ^M
.
Come posso eliminare tutti questi caratteri contemporaneamente?
Risposte:
dos2unix è un'utilità a riga di comando che lo farà, o lo :%s/^M//g
farà se si utilizza Ctrl- v Ctrl- mper immettere ^ M, oppure è possibile :set ff=unix
e vim lo farà per voi.
I documenti sull'impostazione 'fileformat' sono qui e il wiki di vim ha una pagina completa che termina le conversioni .
In alternativa, se sposti molto i file avanti e indietro, potresti non volerli convertire, ma piuttosto farlo :set ff=dos
, quindi Vim saprà che è un file DOS e utilizzerà le convenzioni DOS per i finali di riga.
:%s/^M//g
dovrebbe essere :%s/\r//g
, perché ^M
significa semplicemente "corrispondenza maiuscola" M "all'inizio della riga".
:%s/\r//g
funzionato per me, evviva @Bunyk
set ff=unix
non fa nulla. Forse converte il file, ma tutti i ^M
personaggi sono ancora lì.
Modifica le terminazioni di riga nella vista:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Questo può anche essere usato come operazione di salvataggio (: w da solo non salverà usando le terminazioni di linea che vedi sullo schermo):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
E puoi usarlo dalla riga di comando:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
è molto più bello della maggior parte delle altre cose scritte qui, e lo script bash è un bel bonus.
:e
comandi non sembrano fare nulla sulla mia installazione di Windows Vim. La mia vista mostra ancora i ^M
codici.
Io di solito uso
:%s/\r/\r/g
che sembra un po 'strano, ma funziona a causa del modo in cui VIM abbina l'alimentazione di linea. Trovo anche più facile da ricordare :)
:set ff=unix
prima, ma il file che ho aperto oggi deve essere stato particolarmente strano. Vim ha detto che lo era già, fileformat=unix
ma tutti i finali erano ^M
. Questa soluzione ha funzionato per me.
:%s/\r//g
invece funziona per me.
:%s/\r//g
è il unica soluzione per tutti gli usi, in particolare per i file in modalità mista che contengono una miscela eterogenea di newline in stile DOS e UNIX. Le soluzioni canoniche (ad es. :set ff=unix
, :e ++ff=unix
) Assumono che ogni riga del buffer corrente termini nello stesso stile newline. A volte lo fanno; a volte no. Cue sadface.
Preferisco usare il seguente comando:
:set fileformat=unix
È inoltre possibile utilizzare mac
o dos
per convertire rispettivamente il file in convenzione macintosh o MS-DOS / MS-Windows. E non fa nulla se il file è già nel formato corretto.
Per ulteriori informazioni, consultare la guida di vim:
:help fileformat
^M
caratteri.
set fileformat=unix
al mio file .vimrc ha funzionato.
:set fileformat=unix
per convertire da dos a unix.
da: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
inoltre, come menzionato sopra ^ M = Ctrl+V+ Ctrl+M(non solo digitare il simbolo "^" con il cursore e M)
dos2unix
può modificare direttamente il contenuto del file.
Puoi usarlo direttamente sul file, senza necessità di reindirizzamento temporaneo del file.
dos2unix input.txt input.txt
Quanto sopra utilizza la tastiera americana presunta. Utilizzare l' -
opzione 437 per utilizzare la tastiera del Regno Unito.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(vedi: http://kb.iu.edu/data/acux.html )
I seguenti passaggi possono convertire il formato file per dos in unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Riferimento: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
Il commento su come far apparire ^ M è ciò che ha funzionato per me. Digitando semplicemente "^ M" nel mio vi non si ottiene nulla (non trovato). La sequenza CTRL+ V CTRL+ Mha funzionato perfettamente però.
Il mio comando di sostituzione funzionante era
:%s/Ctrl-V Ctrl-M/\r/g
e sembrava così sul mio schermo:
:%s/^M/\r/g
:%s
invece di :1,$s
. %
è una scorciatoia per 1,$
.
Ho trovato un modo molto semplice: apri il file con nano: nano file.txt
Premere CTRL+ Oper salvare, ma prima di premere Enter, premere: ALT+ Dper alternare le terminazioni di riga DOS e Unix / Linux, oppure: ALT+ Mper alternare tra le terminazioni di Mac e Unix / Linux, quindi premere Enterper salvare e CTRL+ Xper uscire.
^M
terminato. salva come dos da conservare, salva come linux da rimuovere. posso controllare usandocat -v
:g/Ctrl-v Ctrl-m/s///
CtrlMè il carattere \r
, o ritorno a capo, che aggiungono i finali di riga DOS. CtrlVdice a Vim di inserire un CtrlMcarattere letterale nella riga di comando.
Nel suo insieme, questo comando sostituisce tutto \r
con niente, rimuovendoli dalle estremità delle linee.
Puoi usare:
vim somefile.txt +"%s/\r/\r/g" +wq
oppure dos2unix utility
.
In vim, digitare:
:w !dos2unix %
Questo invierà il contenuto del buffer corrente al comando dos2unix e scriverà i risultati sul contenuto corrente. Vim chiederà di ricaricare il file dopo
Di solito c'è un dos2unix
comando che puoi usare per questo, assicurati solo di leggere il manuale poiché le versioni GNU e BSD differiscono su come gestiscono gli argomenti.
Versione BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Versione GNU:
dos2unix $FILENAME
In alternativa, puoi crearne uno tuo dos2unix
con una qualsiasi delle risposte proposte qui, ad esempio:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Sapevo di averlo visto da qualche parte. Ecco il suggerimento per il login di FreeBSD:
Devi rimuovere tutti quei ^ M caratteri da un file DOS? Provare
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Anche se questo argomento è molto vecchio, mi piacerebbe mettere un'altra roba dalla wiki:
%s/\r\+$//g
che riempiono trovano tutti i segni di ritorno a capo (una e più ripetizioni) fino alla fine della riga ed eliminano, quindi \n
rimarranno su eol.
Questo è il mio modo Ho aperto un file in DOS EOL e quando salvo il file che verrà automaticamente convertito in UNIX EOL
autocmd BufWrite * :set ff=unix
se crei un file in NotePad o NotePad ++ in Windows e lo porti su Linux e lo apri con vim, vedrai ^ M alla fine di ogni riga. Per rimuovere questo,
Sul tuo terminale Linux, digita
dos2unix nomefile.ext
Questo farà la magia richiesta.
Volevo newline al posto delle ^ M. Perl in soccorso:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
O per scrivere su stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
e vedi0x0d 0x0a
"\r\n"
che è il tuo problema.