use o resultado da pesquisa na instrução replace com o substituto vim

1

Eu tenho um arquivo com um monte de palavras na forma 'foo' e eu quero mudá-las para o Literal ('foo'). O seguinte: Comando s :%s/'.*'/Literal('.*')/gci encontra as coisas que eu quero mudar, mas, em seguida, substitui todas elas com Literal ('. *') Em vez de Literal ('foo')

Examples:
I get:
'_' -> Literal('.*') 
'dog' -> Literal('.*') 
I want: 
'_' -> Literal('_') 
'dog' -> Literal('dog')
    
por user191304 28.12.2013 / 05:31

2 respostas

4

Você quase a tem

:%s/\('.*'\)/Literal()/gci

Você precisa salvar a correspondência e referenciá-la na substituição. Você estava inserindo um literal (sem trocadilho) * na substituição.

    
por 28.12.2013 / 05:41
1

Uma alternativa à resposta de casey com captura explícita é restringir a correspondência com \zs (start) e \ze (end), para afirmar que as aspas simples estão lá, mas não incluí-las. Então, você pode simplesmente se referir à correspondência na parte de substituição com & :

:%s/'\zs.*\ze'/Literal(&)/gci
    
por 28.12.2013 / 21:31