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
...
/nes nueva línea,/resCR(retorno de carro =Ctrl-M=^M)Cuando se reemplaza
...
/res una nueva línea,/nes un byte nulo (0x00).
Desde vim docs en patrones :
coincide con <CR>
/ncoincide 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
/0para significarNULL, por lo que usa/n - Por lo tanto, no puede usar
/npara significar/n, por lo que usa/r. - Así que no puedes usar
/rpara significar/r, pero no sé quién querría agregar ese char a propósito.
—☈