Como substituir uma palavra por uma palavra arrancada no modo normal

25

Quando tenho que substituir uma palavra por outra que eu arranco antes, normalmente uso um fluxo de trabalho que me parece antinatural:

Digamos que eu tenho este texto:

foo bar buzz

E quero arrancar fooe substituir barpelo que puxei antes.

Depois de puxar foo, vejo as seguintes opções:

Opção 1

  1. Coloque o cursor barcomw

  2. Coloque foona frente barcomP

  3. Coloque o cursor no brestante bare exclua a palavra comde

opção 2

  1. Coloque o cursor na barra com w

  2. Use depara apagarbar

  3. Coloque o conteúdo do registro 0 com "0P(desde que eu apaguei bar, foonão está mais acessível com um simples p)

As duas maneiras me parecem complicadas demais e tenho certeza de que existe uma maneira mais eficiente de realizar essa ação, mas não consigo descobrir como. Essa idéia seria combinar as ações excluir e colocar em apenas uma, ou pelo menos evitar manter a palavra excluída no registro do arranco, para que eu possa colocar a palavra desejada com um simples p.

Também sei que o modo de substituição foi acionado, Rmas ele não permite colocar o que foi arrancado.

TL; DR : Como substituir uma palavra pelo conteúdo do registro yank?

statox
fonte

Respostas:

31

Supondo que você já arrancou foocom yeou algo semelhante, e que o cursor está em algum lugar foo, você pode usar Wvep:

  • Wir para bar(isto é obviamente opcional e dependerá da posição atual do cursor);
  • v para iniciar o modo visual;
  • epara ir até o final da palavra (você também pode usar outros movimentos aqui, como iw);
  • pcolar foo; isso substituirá a seleção visual atual (que é colocada no registro sem nome "").
Martin Tournoij
fonte
2
Você pode estar interessado nos seguintes vimcast episódios: Colar do modo Visual e Permuta duas regiões de texto com exchange.vim
Peter Rincker
6

Eu encontrei outra maneira de fazer isso, é um pouco semelhante à opção 2, mas tem a vantagem de não mexer no estado dos registros.

A idéia é usar o " registro do buraco negro ": esse registro é acessível via "_e tem a particularidade de que você pode escrever nele, mas não ler, portanto, como um buraco negro, esse registro faz desaparecer totalmente qualquer coisa que entre nele. Aqui, podemos usá-lo para que foopermaneça no registro do arranco mesmo após a barexclusão.

Com esta solução, o worflow após o arranque fooseria:

  • Vai barcom W(ou qualquer palavra necessária, é claro)
  • Usando o "registro do buraco negro" para excluir barcom"_de
  • Colocando a foopartir do registro yank com P. O registro do arranco ainda contém foodesde que barentrou no buraco negro.

Não tenho certeza se essa é uma solução melhor do que a do @ Carpersmoker ( em termos de vitória do vimgolf @Carpetsmoker ), mas eu não sabia sobre o registro do buraco negro e achei que alguns poderiam estar interessados ​​em conhecê-lo.

statox
fonte
3
  1. Vá para o início de "foo". Pressione yiw. Isso arranca a palavra interior.

  2. Vá para "bar" pressionando a letra w. Em seguida, selecione-o e puxe de volta:viw"0p

Eu uso ciwe yiwmuito.

Xabierrek
fonte
4
O uso de objetos de texto como iwé interessante, mas sua solução é a mesma do @ CarpetSmoker: selecionar visualmente a segunda palavra e colocar a primeira. Eu também acho que sua solução funcionaria com um simples em pvez de usar o "0registro.
statox
1
  • Quando o cursor estiver em qualquer lugar da palavra,

    • yiw- arranque a palavra e guarde-a no 0registro.
  • Vá para a palavra de destino a ser substituída

    • ciw excluirá a palavra e o colocará no modo de inserção.
    • ctrl-r. Um "pop-up pedindo o registo a ser invocado.
    • 0 irá colar a palavra arrancada.

Palavras arrancadas são (normalmente!) Armazenadas no 0registro. Veja :registerspara visualizar os buffers armazenados. Isso pode parecer um procedimento demorado, IMHO isso abre a porta para os truques de registro muito mais sofisticados.

Sat Yam
fonte