Como fazer uma pesquisa multilinha em menos?


18

Em less, você pode pesquisar usando /um padrão que contenha um retorno de carro e uma nova linha? Sei que seu padrão pode terminar com uma linha usando $(em Como incluir 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.


Você já tentou \n+uma ou mais novas linhas?
Brock Hensley

Qual distribuição Linux e você definiu a variável de ambiente "LESS"?
23415 harrymc

@harrymc Como isso ajudaria na pesquisa de várias linhas?
Sashoalm

Juntando informações.
25915 harrymc

2
Isso não é possível, com base em uma revisão do código fonte de less( search.c:search_range()). A operação de pesquisa / correspondência é executada em uma única linha delimitada por nova linha de cada vez, para que você não possa corresponder além dos limites da linha. Veja line.c:forw_raw_line()para a implementação de "readline" como chamado search_range.
Zackse

Respostas:


7

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

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

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

Para corresponder em várias linhas, você precisará usar uma ferramenta diferente. Uma opção é entrar no seu editor e usar seus recursos de pesquisa, conforme sugerido por outros. Você pode chamar o editor pressionando vem less.


2

Não sabe ao certo como fazê-lo less, mas você pode fazer o mesmo no vim.

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

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

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


1
Isso não responde à pergunta, no entanto, uma vez que se trata de menos, não de vim. Deve ser um comentário.
Sashoalm

1
@sashoalm Ainda é uma tentativa de responder, então eu votaria e segui em frente. As pessoas que procuram uma solução não podem usar uma ferramenta específica.
slhck

2

lessestá usando a 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 encontrar isso também, ou pelo menos descobrir se esse bit de sintaxe foi usado em less:

RE_DOT_NEWLINE Se esse bit estiver definido, o operador de correspondência com qualquer caractere corresponderá a uma nova linha; se esse bit não estiver definido, não será.

Para que eu possa usar o .+padrão para combinar novas linhas. Mas não, não.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.