it-swarm-es.tech

¿Por qué es una nueva línea para Vim?

De la pregunta¿Cómo reemplazar un carácter 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?

241
Vinko Vrsalovic

De vim docs en patrones :

\r 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.

152
pjz

Desde http://vim.wikia.com/wiki/Search_and_replace :

Al buscar

...

\n es una nueva línea, \r es CR (retorno de carro = Ctrl-M = ^M)

Cuando se reemplaza

...

\r es una nueva línea, \n es un byte nulo (0x00).

185
Limited Atonement

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, &).

  • Entonces, no puedes usar \0 para significar NULL, así que usas \n
  • Entonces, no puedes usar \n para significar \n, entonces usas \r.
  • Entonces, no puedes usar \r para significar \r, pero no sé quién querría agregar ese char a propósito.

—☈

99
rking

:help NL-used-for-Nul

Detalle técnico:

Los caracteres <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, puede simplemente ingresar CTRL- @ o " CTRL-V 000". Esto es probablemente lo que esperas. Internamente, el personaje se reemplaza con un <NL> en el patrón de búsqueda. Lo que es inusual es que escribir CTRL-VCTRL-J también inserta un <NL>, por lo tanto, también busca un <Nul> en el archivo. {Vi no puede manejar <Nul> caracteres en el archivo en absoluto}


47
Aristotle Pagaltzis

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 pattern y 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 sigue el enlace a |pattern|, lo llevará 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 el salto de línea/división.

(El acceso directo a esta parte del manual es :h :s% )

10
syockit