Como substituir uma única palavra sob o cursor?

144

Como substituo uma palavra sob o cursor no Vim.

Então, em vez de usar dwentão ia palavra e Esc, então , existe uma combinação mais simples para substituir a palavra sob o cursor?

sayth
fonte

Respostas:

251
ciw

(alterar palavra interna) altera a palavra inteira sob o cursor. Compare com

cw

que mudará apenas a palavra da posição atual do cursor . Para mais informações, consulte esta pergunta / resposta do SO .

Brian Agnew
fonte
Como lidar com a situação se a palavra contiver pontos ou barras (por exemplo, /usr/bin/bashou 1222.333)? Parece que o vim interpreta /e .no final da palavra e não seleciona a sequência inteira.
Alexander Cska
85

Muitas vezes me vejo querendo substituir uma palavra por outra que arranquei de outro lugar. O problema com as outras soluções é que se você tentar alterar uma palavra, então a sua próxima pasta vai ser essa palavra que foi eliminada com cw.

Tente o seguinte:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

Espero que seja o que você estava procurando.

Etéreo
fonte
7
Funciona bem, mas somente se for necessário fazer a substituição once. Se eu tiver que substituir alguns dos second' by primeiros` (no seu exemplo), a palavra copiada se tornará secondapós a primeira substituição.
ViFI
32

ciw

c   change
iw  inner word

Isso excluirá a palavra sob o cursor (mesmo se o cursor estiver em algum lugar no meio da palavra) e entrará no modo de inserção.


Consulte também a documentação do Vim para referência:

:help c
:help text-objects
Xophmeister
fonte
17

Se você deseja alterar uma palavra com uma palavra arrancada anteriormente, existe outra solução viwp(depois de ter arrancado a primeira palavra).

ciwremove a palavra anterior e coloca você no modo de inserção onde estava. Mas então você pode usar ctrl+r, 0para inserir o conteúdo do registro 0 (que contém a palavra arrancada anteriormente).

Assim:

yiw
[move to next word]
ciw
ctrl+r
0

Isso funciona melhor do que viwpporque, após o primeiro uso, você pode executar a substituição repetidamente .. Também não muda para o modo visual e destaca brevemente.

Connor
fonte
1
Não sei ao certo o que você quer dizer com isso não muda de modo, o oposto parece ser o caso, mas talvez seja isso que você queria, permanecer no modo de inserção. Mas uma grande vantagem é que isso (ao contrário de viwp) pode ser feito várias vezes com apenas um puxão. Obrigado!
Palo
Ah, você está certo, eu estava pensando em entrar no modo visual, editado. Eu não percebi que isso era uma limitação viwp- nem sequer .a duplica.
Connor
3
Essa é de longe a melhor solução quando já arrancamos a palavra de substituição.
Mljrg 04/07/19
1
Esta é a resposta! A capacidade de usar .com isso é ótima!
Izzy
1

Tente cw- como em 'alterar palavra'.

Use http://linuxmoz.com/vi-commands-cheat-sheet/ ou qualquer outra folha de dicas como referência.

Kosma Dunikowski
fonte
1
Isso funciona, mas apenas alterará os caracteres à direita do cursor
Brian Agnew