VIM Deshabilitar nueva línea automática al final del archivo
settings newline (12)
¿Sería posible usar un comando especial para guardar estos archivos?
Si lo hace: configure binary,: wy: set nobinary, el archivo se escribirá sin nueva línea si no había ninguno para comenzar.
Esta secuencia de comandos se podría poner en un comando definido por el usuario o en una asignación, por supuesto.
Así que trabajo en una tienda de PHP, y todos usamos editores diferentes, y todos tenemos que trabajar en Windows. Uso vim, y todos en la tienda siguen quejándose de que cada vez que edito un archivo hay una nueva línea en la parte inferior. Busqué y encontré que este es un comportamiento documentado de vi & vim ... pero me preguntaba si había alguna forma de desactivar esta función. (Sería mejor si pudiera deshabilitarlo para extensiones de archivo específicas).
Si alguien sabe acerca de esto, sería genial!
Agrego .vimrc
set binary
y ayuda, pruébalo
Agregue el siguiente comando a su .vimrc para desactivar la opción de fin de línea:
autocmd FileType php setlocal noeol binary fileformat=dos
Sin embargo , el propio PHP ignorará el último fin de línea, no debería ser un problema. Estoy casi seguro de que en su caso hay algo más que está agregando el último carácter de nueva línea, o posiblemente haya una mezcla con los tipos de fin de línea de windows / unix ( /n
o /r/n
, etc.).
Actualizar:
Una solución alternativa podría ser simplemente agregar esta línea a su .vimrc:
set fileformats+=dos
Creo que he encontrado una solución mejor que la respuesta aceptada. Las soluciones alternativas no funcionaban para mí y no quería tener que trabajar en modo binario todo el tiempo. Afortunadamente, esto parece haber terminado el trabajo y todavía no he encontrado ningún efecto secundario desagradable: conservar el final de línea faltante al final de los archivos de texto . Acabo de agregar todo a mi ~ / .vimrc.
Hay otra forma de abordar esto si está utilizando Git para el control de origen. Inspirado por una respuesta aquí , escribí mi propio filtro para usarlo en un archivo gitattributes .
Para instalar este filtro, noeol_filter
como noeol_filter
en algún lugar de tu $PATH
, noeol_filter
ejecutable y ejecuta los siguientes comandos:
git config --global filter.noeol.clean noeol_filter
git config --global filter.noeol.smudge cat
Para comenzar a usar el filtro solo para usted, coloque la siguiente línea en su $GIT_DIR/info/attributes
:
*.php filter=noeol
Esto asegurará que no cometas ninguna línea nueva en eof en un archivo .php
, sin importar lo que haga Vim.
Y ahora, el propio script:
#!/usr/bin/python
# a filter that strips newline from last line of its stdin
# if the last line is empty, leave it as-is, to make the operation idempotent
# inspired by: https://.com/questions/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-file/1663283#1663283
import sys
if __name__ == ''__main__'':
try:
pline = sys.stdin.next()
except StopIteration:
# no input, nothing to do
sys.exit(0)
# spit out all but the last line
for line in sys.stdin:
sys.stdout.write(pline)
pline = line
# strip newline from last line before spitting it out
if len(pline) > 2 and pline.endswith("/r/n"):
sys.stdout.write(pline[:-2])
elif len(pline) > 1 and pline.endswith("/n"):
sys.stdout.write(pline[:-1])
else:
sys.stdout.write(pline)
He agregado una sugerencia en la wiki de Vim para un problema similar (aunque diferente):
He encontrado que este complemento vimscript es útil para esta situación.
Plugin ''vim-scripts/PreserveNoEOL''
O lee más en github
He implementado las sugerencias de Blixtor con el procesamiento posterior de Perl y Python, ya sea ejecutándose dentro de Vim (si está compilado con dicho soporte de lenguaje), o mediante un script externo de Perl. Está disponible como el complemento PreserveNoEOL en vim.org.
No he probado esta opción, pero la siguiente información se proporciona en el sistema de ayuda vim (es decir, ayuda eol):
''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.
Normalmente no es necesario configurar o restablecer esta opción. Cuando ''binario'' está desactivado, el valor no se usa al escribir el archivo. Cuando ''binario'' está activado, se utiliza para recordar la presencia de una para la última línea en el archivo, de modo que al escribir el archivo se puede mantener la situación del archivo original. Pero puedes cambiarlo si quieres.
También le puede interesar la respuesta a una pregunta anterior: " ¿Por qué los archivos deben terminar con una nueva línea? ".
OK, estar en Windows complica las cosas;)
Como la opción ''binario'' restablece la opción ''formato de archivo'' (y escribir con el conjunto ''binario'' siempre escribe con finales de línea de Unix), ¡saquemos el gran martillo y hagámoslo externamente!
¿Qué hay de definir un autocommand (: help autocommand) para el evento BufWritePost? Este comando automático se ejecuta después de cada vez que escribe un búfer completo. En este comando automático, llame a una pequeña herramienta externa (php, perl o cualquier otro script) que elimine la última nueva línea del archivo recién escrito.
Así que esto se vería así y entraría en tu archivo .vimrc:
autocmd! "Remove all autocmds (for current group), see below"
autocmd BufWritePost *.php !your-script <afile>
Asegúrese de leer toda la documentación de vim sobre autocommands si es la primera vez que trata con autocommands. Hay algunas advertencias, por ejemplo, se recomienda eliminar todos los autocmds en su .vimrc en caso de que su .vimrc pueda obtenerse varias veces.
Tal vez usted podría ver por qué se están quejando. Si un archivo php tiene una nueva línea después del final?>, Php lo mostrará como parte de la página. Esto no es un problema a menos que intente enviar encabezados después de incluir el archivo.
Sin embargo, el?> Al final de un archivo php es opcional. ¿No hay final?>, No hay problema con una nueva línea al final del archivo.
incluso si el archivo ya estaba guardado con nuevas líneas al final:
vim -b file
y una vez en vim:
:set noeol
:wq
hecho.
como alternativa, puede abrir archivos en vim con :e ++bin file
Otra alternativa más:
:set binary
:set noeol
:wq
Y para vim 7.4+ también puede usar en su lugar (preferiblemente en su .vimrc):
:set nofixendofline
(Gracias a por las últimas noticias!)