Cosa Vim "aggiunge" al fine dell'ultima riga nel file è il carattere "a capo", che non deve essere confusa con una "nuova linea".
Il carattere "newline" o più precisamente "fine riga" (<EOL>
) significa "tutto ciò che viene dopo questo punto deve essere considerato su un'altra linea". Con questa interpretazione - <EOL>
è una terminazione terminatore - l'ultima riga del file è effettivamente l'ultima con <EOL>
.
Il problema è che la maggior parte degli editori e IDE hanno una diversa interpretazione - <EOL>
è una linea separazione - e, logicamente, di default a non aggiungere un <EOL>
alla fine dell'ultima riga di un nuovo file e, quando incontrano uno <EOL>
, aggiungi una "nuova linea" superflua dopo l'ultima riga reale.
In breve, Vim non aggiunge una "nuova linea": altri editori interpretano (erroneamente) la sua "nuova linea" come una "nuova linea".
Tuttavia, è possibile risolvere il problema attenendosi alla seguente procedura: prima di scrivere il file, fare :set binary noeol
se si desidera che rimanga "<EOL>
-free".
Tuttavia, :h 'binary'
ha molto da dire sui pericoli dello :set binary
quindi direi che girarlo su "tutto il tempo sembra una cattiva idea.
per illustrare i diversi comportamenti, questo è ciò che succede quando si tenta di concatenare due file con <EOL>
:
$ cat file1 $ cat file2 $ cat file1 file2
lorem ipsum Le tramway jaune lorem ipsum
dolor sit avance lentement dolor sit
amet dans le amet
Le tramway jaune
avance lentement
dans le
e questo è ciò che accade quando si tenta di concatenare due file senza <EOL>
:
$ cat file1 $ cat file2 $ cat file1 file2
lorem ipsum Le tramway jaune lorem ipsum
dolor sit avance lentement dolor sit
amet dans le ametLe tramway jaune
avance lentement
dans le
Il primo comportamento è in qualche modo il comportamento previsto e il motivo per cui Vim e molti (se non la maggior parte) programmi UNIX-y predefiniti nell'interpretazione terminatore e aggiungere un carattere <EOL>
alla fine dell'ultima riga.
L'immagine seguente mostra un file semplice con <EOL>
creato con nano
(sarebbe lo stesso con Vim) e aperto in Eclipse, TextMate, Sublime Text, Vim, XCode e TextEdit.
(edit) non esiste una linea 4 in questo file e l'unico editore del gruppo che consente di visualizzare il file in modo corretto è Vim. L'unico scopo della colonna del numero di riga è fornire informazioni sul buffer. Mostrare 4 righe dove ci sono solo 3 è un errore grossolano. (terminato)
Questa immagine mostra un altro file semplice senza <EOL>
creato con Testo Sublime e aperto negli stessi editor/IDE.
e upvote per l'eccellente spiegazione EOL. ma il problema è avere il controllo su questo. Voglio decidere, non lasciare che vim. – gcb
Penso che sia sufficiente scrivere una piccola funzione che temporaneamente "imposta binary noeol" e associ l'evento 'BufWritePre'. – romainl
Anche meglio di 'set binary noeol' sarebbe' setl binary noeol'. – bdesham