La conversione DOS terminatori di linea per Linux terminatori di linea in vim
Domanda
Se apro il file che ho creato in Windows, le linee terminano tutti con ^M
.
Come posso eliminare questi caratteri tutti in una volta?
Soluzione
dos2unix è una riga di comando programma di utilità che possono fare questo, o :%s/^M//g
se si utilizza Ctrl-v Ctrl-m per inserire il ^M, o si può :set ff=unix
e vim farlo per voi.
Documenti in 'formato' impostazione sono qui, e vim wiki dispone di una completa pagina on line di fine conversioni.
In alternativa, se si spostare i file avanti e indietro un sacco, si potrebbe non desidera convertire, ma piuttosto a che fare :set ff=dos
, così vim so è un file DOS e usare DOS convenzioni per terminazioni di linea.
Altri suggerimenti
Modificare la riga finali di vista:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Questo può essere utilizzato anche come operazione di salvataggio (:w la sola a non risparmiare utilizzando i terminatori di linea si vede sullo schermo):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
E si può usare da riga di comando:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
Io in genere uso
:%s/\r/\r/g
che sembra un po ' strano, ma funziona a causa del modo che vim partite con caratteri di avanzamento riga.Trovo anche più facile da ricordare :)
Io preferisco usare il seguente comando :
:set fileformat=unix
È inoltre possibile utilizzare mac
o dos
rispettivamente a convertire il file macintosh o MS-DOS, MS-Windows file convenzione.E non fa nulla se il file è già nel formato corretto.
Per ulteriori informazioni, vedere il vim help :
:help fileformat
:%s/\r+//g
In Vim, che mette a nudo tutti i ritorni a capo, e lascia solo punto e a capo.
:set fileformat=unix
per la conversione da dos a unix.
da: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc] :%s/\(r$),//
dos2unix
è possibile modificare direttamente il contenuto del file.
È possibile utilizzare direttamente sul file, senza bisogno di file temporanei di reindirizzamento.
dos2unix input.txt input.txt
Usi di cui sopra assunto la tastiera US.Utilizzare il -
437 opzione per utilizzare la tastiera UK.
dos2unix -437 input.txt input.txt
La conversione di directory di file da dos a Unix
Utilizza la riga di comando e sed, trova tutti i file nella directory corrente con l'estensione ".ext" e rimuovere tutti i "^M"
@ 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 già accennato ^M = Ctrl+V + Ctrl+M (non basta digitare il cursore "^" simbolo e M)
tr -d '\15\32' < winfile.txt > unixfile.txt
(vedere: http://kb.iu.edu/data/acux.html)
Procedura seguente consente di convertire il formato di file per dos a 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
Con il seguente comando:
:%s/^M$//g
Ottenere i ^M
per apparire tipo CtrlV quindi CtrlM. CtrlV dice a Vim di prendere il carattere successivo è entrato letteralmente.
Ho trovato un modo molto semplice:Aprire il file con nano: nano file.txt
Premere CTRL+O per risparmiare, ma prima di premere Inserire, stampa: ALT+D per alternare tra DOS e Unix/Linux fine riga, oppure: ALT+M per alternare tra Mac e Unix/Linux fine riga, quindi premere Inserire per salvare e CTRL+X per uscire.
:g/Ctrl-v Ctrl-m/s///
CtrlM è il carattere \r
, o ritorno a capo, che DOS fine riga, aggiungere. CtrlV dice a vim per inserire un valore letterale CtrlM carattere della riga di comando.
Complessivamente, questo comando sostituisce tutti \r
con niente, eliminando le estremità delle linee.
È possibile utilizzare:
vim somefile.txt +"%s/\r/\r/g" +wq
o dos2unix utility
.
Il commento su come ottenere il ^M a comparire è quello che ha funzionato per me.Semplicemente digitando "^M" nella mia vi è arrivato nulla (non trovato).Il CTRL+V CTRL+M sequenza di fatto perfettamente però.
Il mio lavoro di sostituzione del comando
:%s/Ctrl-V Ctrl-M/\r/g
e sembrava che questo sul mio schermo:
:%s/^M/\r/g
È possibile utilizzare il seguente comando:
:%s/^V^M//g
dove i '^' uso di mezzi CTRL chiave.
al di sotto di comando è utilizzato per riformattare tutto .sh file nella directory corrente, ho provato sulla mia Fedora OS.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
Di solito c'è un dos2unix
comando che è possibile utilizzare per questo, basta assicurarsi di leggere il manuale di GNU e BSD versioni differiscono su come affrontare gli argomenti.
BSD versione:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
La versione GNU:
dos2unix $FILENAME
In alternativa, è possibile creare il proprio dos2unix
con qualsiasi proposta risposte qui, per esempio:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Sapevo di aver già visto da qualche parte.Qui è il FreeBSD login suggerimento:
È necessario rimuovere tutte quelle ^M caratteri da un file di DOS?Provare
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
In vim, tipo:
:w !dos2unix %
Questo tubo il contenuto del buffer di corrente per il dos2unix comando e scrivere i risultati sul contenuto corrente.Vim chiede di ricaricare il file dopo
Per eseguire direttamente in console:vim file.txt +"set ff=unix" +wq
Anche se questo topic è molto vecchio, vorrei mettere altra roba da wikia:
%s/\r\+$//g
che riempire trovare tutte le spese di trasporto di ritorno segni (uno e più ripetizioni) fino alla fine della riga ed eliminare, quindi, solo \n
soggiorno presso eol.
Questo è il mio modo.Ho aperto un file in dos EOL e quando salvo il file che verrà automaticamente convertito a unix EOL
autocmd BufWrite * :set ff=unix
se si crea un file in blocco note o NotePad ++ in windows e portare a Linux e all'open da vim, si vedrà ^M alla fine di ogni riga.Per rimuovere questo,
Presso il terminale di Linux, tipo
dos2unix il nome del file.ext
Questo farà la richiesta di magia.
Ho voluto a capo, in luogo di ^M.Perl per il salvataggio:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
O scrivere a stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt