2012-12-20 18 views
6

L'utilizzo del comando :source di vim su un file vimscript con terminazioni di riga dos mi dà errori che non è in grado di gestire i caratteri ^M.Come rendere vim: source accetta differenti terminazioni di riga?

I caratteri ^M fanno parte delle terminazioni della linea dos, ma non le terminazioni di riga unix. Quindi sta provando a :source il file usando un formato di file unix.

Il fatto è che ho l'impostazione :set fileformats=unix,dos. Quando apre e modifica il file (non :source: -ing) non ci sono problemi di fine riga. Vim vede un file con finali di linea pura e come da fileformats si adatta di conseguenza.

:help fileformats dà solo l'indizio scarno che in dos sistemi se avete :set fileformats=unix,dos, Vim esegue una rilevazione ad hoc di cui si dovrebbe usare (e come un dettaglio irrilevante, questo :source rilevamento tratta mescolati fine riga in modo diverso rispetto a per apertura file).

Sono su un moderno sistema Mac, come ottenerlo a :source un file di fine riga dos?

risposta

6

Questo è discusso allo :h :source_crnl.

Nei sistemi UNIX, che include Mac OS X, non viene rilevata CRLF automatica, ed un CR effettivo alla fine di una linea sarà può generare un errore, ad esempio in una mappatura. Dall'aiuto:

Su altri sistemi, Vim si aspetta che i file ": source" ed end finiscano in un < NL>. Funzionano sempre. Se si sta utilizzando un file con < CR> < NL> < EOL> s (ad esempio, un file creato su MS-DOS), tutte le linee avranno un trailing < CR>.

Per la massima compatibilità, è preferibile che i file di script Vim utilizzino sempre newline NL. Funzioneranno sempre ovunque, a condizione che la prima riga dello script non per qualche motivo finisca in un CR e 'fileformats' non sia vuoto (non è vuoto per impostazione predefinita).

In breve, è consigliabile convertire le terminazioni di linea in LF.

+0

Il modo più semplice per eseguire questa conversione è fare ': set ff = unix' e quindi salvare il file. ... cioè se ': set ff?' restituisce 'dos' comunque ... –

+1

@ dash-tom-bang Oppure, in un unico comando,': w ++ ff = unix'. – glts