vim procura por quebra de linha

12

Quando eu estou editando um documento LaTeX no vim, muitas vezes eu quero procurar por uma frase. Como tenho a configuração do LaTeX para quebrar linhas, às vezes metade da frase estará em uma linha enquanto a outra metade está na próxima. Nesse caso, a pesquisa não encontra o que estou procurando. Então, por exemplo

blah blah blah hello
world blah blah blah

ao pesquisar usando /hello world , não encontro o que estou procurando. Existe uma maneira rápida e fácil de modificar essa pesquisa para me levar aonde eu quero estar? Ou melhor ainda, uma maneira de dizer ao vim que corresponde a qualquer espaço em branco (espaço, tabulação, nova linha) com um espaço na string de pesquisa?

    
por Bryan Ward 18.02.2011 / 06:33

4 respostas

5

Este problema foi resolvido no link . Incluído é uma função que pode fazer o que eu preciso.

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

Em seguida, você pode fazer uma pesquisa em várias linhas usando :S hello world e ele converterá isso em hello\s\+world e pesquisará por ele. Outro recurso interessante é que isso também adicionará essa nova pesquisa ao histórico de pesquisa. Isso permite que você volte e modifique a pesquisa usando q/ , se necessário. Também pode ser usado para fazer substituições com :%s//new thing/g . A desvantagem disso é que ele não usa incsearch se você tiver ativado.

    
por 22.04.2011 / 23:24
14

Após mais pesquisas, parece que a maneira mais fácil de fazer isso é com \_s . Então, por exemplo:

/hello\_sworld
    
por 18.02.2011 / 19:45
3

A maneira que eu conheço não é difícil, mas é um pouco entediante. Substitua cada espaço em sua consulta de pesquisa pelo seguinte:

[ \t\n]\+

(Observe o espaço após o [ .) Essa é a sintaxe de correspondência de expressão regular. Dividido, isso significa:

  • [...] significa corresponder a qualquer um da lista de caracteres dentro dos colchetes.
  • \t é a aba
  • \n é Newline
  • ...\+ significa corresponder a um ou mais dos anteriores.

Para mais informações sobre expressões regulares, você pode perguntar ao vim:

:help regexp
:help usr_27
    
por 18.02.2011 / 08:24
1

Eu pessoalmente usaria [ \t\n]* em vez de espaços. Isso corresponderá a zero ou mais de '', tab e newline. Desta forma, se uma instância do seu padrão de pesquisa abranger uma quebra de linha, mas outra não, ambos serão correspondidos.

    
por 18.02.2011 / 19:08

Tags