Como alterar seletivamente uma string com destaque?

11

Ao pesquisar, destaquei a sequência que quero alterar. Agora eu quero substituir apenas o texto destacado. Estou usando npara avançar para a próxima instância da string de pesquisa. Eu estava pensando que poderia fazer algo assim, ciwmas isso muda a palavra inteira e não apenas o texto destacado.

Estou familiarizado, :%s/old/new/gmas não quero alterar todas as instâncias. Em vez disso, quero avançar meu cursor para cada instância e depois decidir se devo alterá-lo.

zundarz
fonte

Respostas:

16

Use o gnmovimento para editar a correspondência de pesquisa atual. O exemplo a seguir alterará a correspondência atual para "FooBar":

cgnFooBar

A grande parte dessa técnica é que você pode repetir a alteração via .. Supondo que a próxima partida será alterada da mesma maneira que você pode usar .para repetir. Ou pule algumas partidas via ne use ..

O Vimcasts tem um bom episódio sobre este assunto: Operando em correspondências de pesquisa usando o gn

Para obter mais ajuda, consulte:

:h gn
Peter Rincker
fonte
Definitivamente, este é o caminho a seguir quando você tem diferentes cadeias de substituição que precisa usar em lugares diferentes. Não tenho certeza sobre as nuances do modo visual que parecem ser invocadas gn, então, aqui está um método semelhante que eu acabei de descobrir:c//e<CR>FooBar<Esc>//<CR>
Jeff
Existe uma maneira de alterar todas as seleções / correspondências de uma só vez? Basicamente, refatorar?
Geremia
@ Geremia, sim, :%s/oldtext/newstuff/gmudará todas as correspondências de oldtextpara newstuff.
Zundarz 30/07/19
@ zundarz Não quero fazer uma regexp, mas substituir apenas os nomes de variáveis. Em vez de bater .várias vezes, eu posso usar :%norm .( fonte ).
Geremia
7

Se você já pesquisou uma palavra com /wordou ?word.

Você pode :%s//newword/gcsubstituir a palavra pesquisada anteriormente newword, deixando o termo de pesquisa ( s//..) vazio.

A cbandeira diz que todas as alterações devem ser confirmadas pressionando ysim ou nnão.

Dê uma olhada :help :s_flagspara obter mais informações sobre o sinalizador de confirmação.

Raphael Ahrens
fonte
1
Eu sei que você disse para olhar para a ajuda, mas você pode também expressamente mencionar que você também pode pressionar l, ae q(ou <Esc>) para várias maneiras de encerrar o ciclo de confirmação.
Jeff
2

Método 1

Você pode tirar proveito dos mapeamentos gne gNpara realizar o que deseja. gnprocurará o último termo de pesquisa usado e selecionará visualmente a correspondência. gNfaz exatamente a mesma coisa, exceto que pesquisa para trás. Quando combinado com um operador como c, o operador será aplicado à correspondência. Por exemplo, se sua última string de pesquisa for "foo" e você digitar cgn, ela procurará a próxima instância de "foo", exclua-a e colocá-lo no modo de inserção para inserir o texto de substituição.

Para mais informações, consulte :help gne :help gN.

Método # 2

Você pode usar o :substitutecomando com a cbandeira. Isso solicitará que você confirme cada substituição. Por exemplo, suponha que você queira substituir foo por bar no arquivo inteiro, mas deseje confirmar cada substituição:

:%s/foo/bar/gc

Para saber mais sobre isso, consulte estes tópicos da Ajuda: :help :s_flags, :help cmdline-ranges, e :help :substitute.

EvergreenTree
fonte