Como procurar no vim ignorando todo o espaço em branco (e tornando-o uma função)

0

Como posso pesquisar uma string no vim e, assim, ignorar qualquer espaço em branco (ou particularmente quebras de linha) entre quaisquer caracteres?

E, provavelmente, fazendo uma função que pode pesquisar ignorando todo o espaço em branco.

Encontrei uma maneira de ignorar o espaço em branco no regex. Não é realmente elegante. Apenas insira \s* entre qualquer caractere. Portanto, fazer isso seria realmente necessário. link

Eu também encontrei uma maneira de pesquisar em torno de quebras de linha no vim: busca vim em torno de quebras de linha

No entanto, o último link fornece uma solução apenas se a quebra de linha for um espaço. No entanto, quero ignorar todo o espaço em branco.

Então, quando eu pesquisar o helloworld aqui:

blabla blalba hell  
oworld bla bla h  
elloworl bla bla  

Deve corresponder duas vezes, apesar das quebras de linha.

Eu acho que basicamente preciso alterar a função do link vim um pouco que mude a pesquisa para:

h\n?e\n?l\n?l\n?o\n? \n?w\n?o\n?r\n?l\n?d  

Ou:

h\s_?e\s_?l\s_?l\s_?o\s_? \s_?w\s_?o\s_?r\s_?l\s_?d

Mas não faço ideia de como alterar a função para isso.

    
por Hielke Walinga 20.09.2018 / 17:27

2 respostas

2

O tópico Procurar por texto visualmente selecionado na Vim Tips Wiki tem um mapeamento que pesquisa a seleção visual atual, Independentemente da quantidade e tipo de espaços em branco entre as palavras. Você pode usá-lo como o mapeamento * interno para pesquisar (ignorando espaços) a seleção atual. Muito útil!

No entanto, você quer ainda mais indiferença ao espaço em branco, permitindo quebras de linha (e outro espaço em branco?) em qualquer posição no texto. Isso é possível também. Você pode adaptar o padrão de pesquisa atual (armazenado no registro / , acessível a partir do Vimscript via @/ ) com este comando:

:let @/ = join(split(@/, '\zs'), '\_s*')

O split() primeiro corta a pesquisa atual (literal) em uma lista de caracteres individuais (para que não funcione corretamente com a expressão regular existente, como \+ ou \| !), então join() s volta junto com \_s* (correspondendo a qualquer quantidade de espaço em branco), e atribui de volta ao registro de pesquisa.

Você pode criar um mapeamento a partir disso ( :nnoremap <Leader>/ :let ...<CR> ) ou incorporar isso no mapeamento do modo visual mencionado acima.

    
por 20.09.2018 / 18:15
0

Esta solução link aponta para um visual solução que pode funcionar para o seu caso.

    
por 20.09.2018 / 17:44