sheet - vim rtor
¿Por qué necesito vim en modo binario para que funcione ''noeol''? (4)
tener una preferencia simple en .vimrc para NO agregar nuevas líneas en cada archivo que edito
Puedes usar mi plugin PreserveNoEOL para eso. Con esta configuración simple, has terminado; alternativamente, también puedes influenciar esto por buffer:
:let g:PreserveNoEOL = 1
Esta pregunta es un seguimiento del trabajo que utilizo para "guardar archivos en vim sin tener que agregar la nueva línea al final del archivo" molesto ".
Básicamente no puedo usar set noeol
en mi .vimrc
porque no hace nada!
Sin embargo, hace lo que se supone que debe hacer si edito el archivo en modo binario. ( vim -b file
lugar de vim file
)
¿Porqué es eso?
De todos modos, ¿tengo una preferencia simple en .vimrc
para NO agregar nuevas líneas en cada archivo que edito?
Además, ¿qué tipo de problemas encontraré si comienzo a editar cada archivo en modo binario? Hasta ahora no he visto ninguna diferencia.
Lo que Vim "agrega" al final de la última línea en su archivo es el carácter "nueva línea", que no debe confundirse con una "nueva línea".
El carácter "nueva línea" o más exactamente el carácter "fin de línea" ( <EOL>
) significa que "lo que venga después de este punto debe considerarse en otra línea". Con esta interpretación, <EOL>
es un terminador de línea, la última línea del archivo es efectivamente la última con un <EOL>
.
El problema es que la mayoría de los editores e IDE tienen una interpretación diferente ( <EOL>
es un separador de líneas) y, lógicamente, no agregan un <EOL>
al final de la última línea de un archivo nuevo y, cuando se encuentran con un <EOL>
, agrega una "nueva línea" superflua después de la última línea real.
En resumen, Vim no agrega una "nueva línea": otros editores interpretan (erróneamente) su "nueva línea" como una "nueva línea".
Pero puede :set binary noeol
ese problema haciendo lo siguiente: antes de escribir su archivo, realice :set binary noeol
si desea que permanezca " <EOL>
-free".
Sin embargo :h ''binary''
tiene mucho que decir sobre los peligros de :set binary
así que diría que encenderlo todo el tiempo suena como una mala idea.
Para ilustrar los diferentes comportamientos, esto es lo que sucede cuando intenta concatenar dos archivos 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
y esto es lo que sucede cuando intentas concatenar dos archivos sin <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
El primer comportamiento es de alguna manera el comportamiento esperado y la razón por la que Vim y muchos (si no la mayoría) de los programas UNIX-y predeterminan la interpretación del terminador y agregan un carácter <EOL>
al final de la última línea.
La siguiente imagen muestra un archivo simple con <EOL>
creado con nano
(sería lo mismo con Vim) y se abrió en Eclipse, TextMate, Sublime Text, Vim, XCode y TextEdit.
(editar) No hay línea 4 en este archivo y el único editor del grupo que muestra el archivo correctamente es Vim. El único propósito de una columna de número de línea es proporcionar información sobre el búfer. Mostrar 4 líneas donde solo hay 3 es un gran error. (terminado)
Esta imagen muestra otro archivo simple sin <EOL>
creado con Sublime Text y abierto en los mismos editores / IDEs.
Según el vimdoc noeol
no hace nada a menos que el modo binary
esté noeol
.
*''endofline''* *''eol''* *''noendofline''* *''noeol''*
''endofline'' ''eol'' boolean (default on)
local to buffer
{not in Vi}
When writing a file and this option is off and the ''binary'' option
is on, no <EOL> will be written for the last line in the file. This
option is automatically set when starting to edit a new file, unless
the file does not have an <EOL> for the last line in the file, in
which case it is reset. Normally you don''t have to set or reset this
voption. When ''binary'' is off the value is not used when writing the
file. When ''binary'' is on it is used to remember the presence of a
<EOL> for the last line in the file, so that when you write the file
the situation from the original file can be kept. But you can change
it if you want to.
desde la versión 7.4.785 vim tiene la configuración fixendofline
. Puede evitar el binary
con algunos efectos secundarios y simplemente establecer
set noendofline
set nofixendofline