mac - ¿Por qué es / ra newline para Vim?
vim pdf (5)
:help NL-used-for-Nul
Detalle técnico:
<Nul>
en el archivo se almacenan como<NL>
en la memoria. En la pantalla se muestran como "^@
". La traducción se realiza al leer y escribir archivos. Para hacer coincidir un<Nul>
con un patrón de búsqueda, solo puede ingresar CTRL-@ o " CTRL-V 000". Esto es probablemente lo que esperas. Internamente, el carácter se reemplaza con un<NL>
en el patrón de búsqueda. Lo que es inusual es que al escribir CTRL-V CTRL-J también inserta un<NL>
, por lo que también busca un<Nul>
en el archivo. {Vi no puede manejar<Nul>
caracteres en el archivo en absoluto}
De la pregunta ¿Cómo reemplazar un personaje por una nueva línea en Vim? . Tienes que usar / r al reemplazar el texto por una nueva línea, como esta
:%s/%//r/g
Pero al reemplazar el final de las líneas y las nuevas líneas para un personaje, puedes hacerlo como:
:%s//n/%/g
¿Qué sección del manual documenta estos comportamientos y cuál es la razón detrás de ellos?
De More :
Al buscar
...
/n
es nueva línea,/r
esCR
(retorno de carro =Ctrl-M
=^M
)Cuando se reemplaza
...
/r
es una nueva línea,/n
es un byte nulo (0x00
).
Desde vim docs en patrones :
coincide con <CR>
/n
coincide con un final de línea: al hacer coincidir una cadena en lugar de un texto de búfer, se hace coincidir un carácter de nueva línea literal.
En primer lugar, abra :h :s
para ver la sección "4.2 Sustituto" de la documentación sobre "Cambio". Esto es lo que acepta el comando:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Observe la descripción sobre el pattern
y la string
Para el
{pattern}
ver|pattern|
.
{string}
puede ser una cadena literal, o algo así
especial; ver|sub-replace-special|
.
Así que ahora sabes que el patrón de búsqueda y los patrones de reemplazo siguen reglas diferentes. Si sigues el enlace a |pattern|
, lo lleva a la sección que explica todos los patrones de expresión regular utilizados en Vim.
Mientras tanto, |sub-replace-special|
lo lleva a la subsección de "4.2 Sustituto", que contiene los patrones de sustitución, entre los cuales se encuentra /r
para salto de línea / división.
(El acceso directo a esta parte del manual es :h :s%
)
Otro aspecto de esto es que /0
, que tradicionalmente es NULL, se toma en s///0/
para significar "todo el patrón coincidente". (Que, por cierto, es redundante con, y más largo que, &
).
- Por lo tanto, no puede usar
/0
para significarNULL
, por lo que usa/n
- Por lo tanto, no puede usar
/n
para significar/n
, por lo que usa/r
. - Así que no puedes usar
/r
para significar/r
, pero no sé quién querría agregar ese char a propósito.
—☈