Pregunta
De la pregunta Cómo reemplazar un personaje para una nueva línea en Vim?.Usted tiene que usar cuando la sustitución de texto para una nueva línea, como este
:%s/%/\r/g
Pero cuando la sustitución final de las líneas y saltos de línea para un personaje, puedes hacerlo así:
:%s/\n/%/g
¿En qué sección del manual de los documentos de estos comportamientos, y cuál es el razonamiento detrás de ellos?
Solución
De vim docs en los patrones de:
\r
los partidos <CR>
\n
coincide con un fin-de-línea - Cuando la coincidencia en una cadena en lugar de búfer de texto literal de un salto de línea el carácter es correspondido.
Otros consejos
De http://vim.wikia.com/wiki/Search_and_replace :
Cuando La Búsqueda
...
\n
es el salto de línea,\r
esCR
(retorno de carro =Ctrl-M
=^M
)Cuando La Sustitución De
...
\r
es el salto de línea,\n
es un byte nulo (0x00
).
Otro aspecto de esto es que \0
, el cual tradicionalmente es NULL, se toma en
s//\0/
significa "el todo igualado patrón".(Que, por cierto, es redundante, y más, &
).
- No se puede utilizar
\0
a decirNULL
, por lo que el uso\n
- No se puede utilizar
\n
a decir\n
, por lo que el uso\r
. - No se puede utilizar
\r
a decir\r
, pero no sé que quiere añadir que char a propósito.
—☈
:help NL-used-for-Nul
Detalles técnicos:
<Nul>
los caracteres en el archivo se almacenan como<NL>
en memoria.En la pantalla ellos se muestran como "^@
".La traducción se realiza cuando la lectura y la escritura los archivos.Para que coincida con un<Nul>
con un patrón de búsqueda sólo puede entrar en CTRL-@ o "CTRL-V 000".Esto es probablemente lo que usted espera.Internamente, el el carácter es reemplazado con un<NL>
en el patrón de búsqueda.Lo que es inusual es que escribir CTRL-V CTRL-J también se inserta una<NL>
, así también, se busca un<Nul>
en el archivo.{Vi no puede manejar<Nul>
los caracteres en el archivo}
En primer lugar, abre :h :s
consulte la sección "4.2 Sustituto" de la documentación sobre el "Cambio".Aquí está lo que el comando acepta:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Observe la descripción acerca de pattern
y string
Para el
{pattern}
ver|pattern|
.
{string}
puede ser un literal de cadena, o algo
especial;ver|sub-replace-special|
.
Así que ya sabes que el patrón de búsqueda y reemplazo de los patrones siguen reglas diferentes.Si usted sigue el enlace |pattern|
, se accede a la sección en la que se explica todo el regexp los patrones utilizados en Vim.
Mientras tanto, |sub-replace-special|
lleva a la subsección de "4.2 Sustituto", que contiene los patrones de sustitución, entre los que se \r
para el salto de línea/split.
(El acceso directo a esta parte del manual es :h :s%
)