En vim editor, quiero reemplazar un carácter de nueva línea (\ n) con dos nuevos caracteres de línea (\ n \ n) usando el modo de comando vim.
Contenido del archivo de entrada:
This is my first line.
This is second line.
Comando que probé:
:%s/\n/\n\n/g
reemplaza la cadena con caracteres no deseados como
This is my first line.^@^@This is second line.^@^@
Entonces probé el siguiente comando
:%s/\n/\r\r/g
Funciona correctamente ¿Puedes explicar por qué funciona bien con el segundo comando?
vim
regular-expression
vi-mode
Raghvendra
fuente
fuente

/como separador. Esto es más legible::%s;\n;\n\n;g\n, reemplazar con\r\r,:% s/\n/\r\r/g: stackoverflow.com/a/71334/911945Respuestas:
Por extraño que parezca,
\nen vim para reemplazo no significa nueva línea, sino nula. ASCII nul es^@( control@).Históricamente, vi reemplaza
^M(controlM ) como el final de línea, que es la nueva línea. vim agregó una extensión\r(como el lenguaje C) para significar lo mismo que^M, pero los desarrolladores optaron por hacer que el\nsignificado sea nulo al reemplazar el texto. Esto es inconsistente con su uso en búsquedas , que encuentran una nueva línea.Otras lecturas:
fuente
Pruebe esto:
%s/$/^V^M/(donde^VestáCtrl-Vy^MestáCtrl-M- cuando escribe^Vimprimirá un^carácter y luego retrocederá sobre él y luego cuando escriba el^Maparecerá como^M... el Ctrl-V es el siguiente carácter literal literal tty - ejecute el comandostty -apara muestra los caracteres especiales de tu tty).fuente
vimse utiliza\npara representar un carácter nulo\0en la memoria, es decir, cómovimmanejar el archivo contiene un carácter nulo (mientrasvique no puede).El uso de
\nsolo coincide con el final de línea en el búfer, no la nueva línea en la cadena cuando se usa en expresión.Consulte : h NL-used-for-Null y : h CR-used-for-NL para obtener más detalles.
fuente
Probado con Neovim (
nvim) yVimversionesEliminar una nueva línea:
Aquí,
\ncoincide con las nuevas líneas ( sin embargo, para insertar una nueva línea, use\r):Añadir una nueva línea:
No:
^@es una marca diacrítica para LF (avance de línea; ver http://vimhelp.appspot.com/digraph.txt.html#digraphs-default )Sí:
Para abordar la pregunta del OP (cómo reemplazar uno
\ncon dos\n\n), simplemente agregue otro\r:... es decir, hacer coincidir la nueva línea original (
\n) y reemplazarla con dos nuevas líneas / retornos de carro (\r\r).fuente