O VIM vê correspondências de expressões regulares enquanto você digita

8

Se eu digitar /regex, o cursor pulará temporariamente para a primeira correspondência e todas as correspondências serão destacadas. Isso é atualizado conforme eu digito. É possível obter esse comportamento quando estou me preparando para fazer uma substituição? Por exemplo, quando estou trabalhando em uma expressão regular complicada :%s/\<regex\>/, gostaria de saber o que está correspondendo antes de pressionar o gatilho e alterar tudo. Alguma maneira de fazer isso?

John Berryman
fonte
Seria bom se funcionasse da maneira que funciona com a pesquisa: destacando o que atualmente corresponde. Você encontrou a melhor maneira de fazer isso?
Anton Daneyko

Respostas:

12

Digite sua pesquisa usando / (ou ? ) Para começar, o que permitirá que você ajuste sua regex (já que você está usando a pesquisa)

Depois de obter tudo de bom, você pode usar o padrão de pesquisa anterior (o que você acabou de usar) no comando substitute usando dois separadores para o item 'search':

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

Obviamente, você pode usar seleções e intervalos, normalmente.

:1,15s,,cougar,g
:'<,'>s::tiger:
lornix
fonte
+1 para me ensinar sobres//
Steven Lu
2

Uma opção é que você pode ter um sinalizador de confirmação c.

:%s;regex;replacement;gc

:h s_flags:

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

Você também pode tentar o grepcomando para ver a saída filtrada e o arquivo original destacado.

:g/re/p ou :g/re/

Prince John Wesley
fonte
Gosto, mas ainda assim preciso que eu complete a expressão regular antes de ver o que se correspondesse.
21812 John Berryman
0

Bem, o caminho mais curto para ver o que sua expressão regular corresponderá é fazendo uma pesquisa /usando o regex desejado. Irá para a primeira partida e marcará enquanto você estiver digitando. Experimente - vimnão irá decepcioná-lo.


fonte
É verdade, embora tenha sido o que afirmei na pergunta. Eu gostaria que fosse atualizado, pois estou me preparando para substituir. Com sua solução, tenho que tentar o regex e copiá-lo (como?) E depois usá-lo em uma substituição. Isso não é bom o suficiente.
22812 John Berryman