¿Cómo hacer una búsqueda multilínea en menos?

¿Cómo hacer una búsqueda multilínea en menos?

En less, ¿puedes buscar usando /un patrón que contenga un retorno de carro y una nueva línea? Sé que tu patrón puede terminar con una línea usando $(from¿Cómo incluyo nuevas líneas en una búsqueda en less?), pero necesito que el patrón coincida con el texto que abarca varias líneas.

Lo intenté \n, pero eso solo busca el npersonaje.

Respuesta1

No es posible hacer coincidencias entre límites de líneas, porque la función de búsqueda lessopera en una sola línea delimitada por nueva línea a la vez. Este es el caso independientemente de la implementación de expresiones regulares del sistema (GNU, POSIX, PCRE, etc.).

Tenga en cuenta que no pude encontrar un repositorio de código fuente oficial para el desarrollo principal de less, pero para fines de revisión del código aquí, los enlaces que siguen son del árbol de contribuciones de FreeBSD.

Verbúsqueda.c:rango_búsqueda()para la implementación de la operación de búsqueda. El bucle en él llamalínea.c:forw_raw_line()para recuperar el siguiente bloque de contenido delimitado por nueva línea. Ese bloque se pasa apartido.c:match_pattern()donde se ejecuta el patrón de búsqueda (expresión regular).

Para hacer coincidir varias líneas, necesitará utilizar una herramienta diferente. Una opción es ingresar a su editor y utilizar sus capacidades de búsqueda como lo sugieren otros. Puede invocar el editor vpresionando less.

Respuesta2

No estoy seguro de cómo hacerlo en less, pero puedes lograr lo mismo en vim.

http://vim.wikia.com/wiki/Search_across_multiple_lines

/PATTERN1\\_.\\{-}PATTERN2

El átomo \\_.encuentra cualquier carácter, incluido el final de línea. El multi \\{-}coincide con la menor cantidad de coincidencias posible.

Respuesta3

lessutiliza edsintaxis de expresiones regulares y, lamentablemente, no admite coincidencias multilínea.

https://www.gnu.org/software/gnulib/manual/html_node/ed-regular-expression-syntax.html#ed-regular-expression-syntax

Esperaba encontrar eso también, o al menos saber si este bit de sintaxis se usó en less:

RE_DOT_NEWLINE Si este bit está establecido, entonces el operador de coincidencia de cualquier carácter coincide con una nueva línea; si este bit no está configurado, entonces no lo está.

Entonces puedo usar .+el patrón para unir nuevas líneas. Pero no, no es así.

información relacionada