Como fazer uma pesquisa multilinha em menos?

Como fazer uma pesquisa multilinha em menos?

Em less, você pode pesquisar usando /um padrão que contenha retorno de carro e nova linha? Eu sei que seu padrão pode terminar com uma linha usando $(deComo incluo novas linhas em uma pesquisa em menos?), mas preciso que o padrão corresponda ao texto que abrange várias linhas.

Eu tentei \n, mas isso só procura pelo npersonagem.

Responder1

Não é possível fazer a correspondência entre limites de linha, porque a função de pesquisa lessopera em uma única linha delimitada por nova linha por vez. Este é o caso independentemente da implementação da regex do sistema (GNU, POSIX, PCRE, etc.).

Observe que não consegui encontrar um repositório fonte oficial para o desenvolvimento principal do less, mas para fins de revisão de código aqui, os links a seguir são da árvore de contribuições do FreeBSD.

Versearch.c:intervalo_de_pesquisa()para a implementação da operação de busca. O loop nele chamalinha.c:forw_raw_line()para recuperar o próximo bloco de conteúdo delimitado por nova linha. Esse bloco é passado paramatch.c:match_pattern()onde o padrão de pesquisa (expressão regular) é executado.

Para combinar várias linhas, você precisará usar uma ferramenta diferente. Uma opção é acessar seu editor e usar seus recursos de pesquisa conforme sugerido por outros. Você pode invocar o editor vpressionando less.

Responder2

Não tenho certeza de como fazer isso em less, mas você pode fazer o mesmo em vim.

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

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

O átomo \\_.encontra qualquer caractere, incluindo fim de linha. O multi \\{-}corresponde ao mínimo possível.

Responder3

lessestá usando edsintaxe regex e, infelizmente, não suporta correspondência multilinha.

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

Eu esperava descobrir isso também, ou pelo menos descobrir se esse bit de sintaxe foi usado em less:

RE_DOT_NEWLINE Se este bit estiver definido, o operador match-any-character corresponde a uma nova linha; se este bit não estiver definido, então isso não acontece.

Portanto, posso usar .+o padrão para corresponder às novas linhas. Mas não, isso não acontece.

informação relacionada