Como deletar uma palavra e entrar no modo de inserção no Vim?

98

No modo normal, posso pressionar Ctrl+, Eque exclui o resto da palavra atual e vai para o modo de inserção.

Quero excluir a palavra inteira, independentemente da posição do cursor (dentro da palavra, é claro).

Joernsn
fonte

Respostas:

164

Você pode usar "alterar palavra interna" digitando "ciw" para excluir uma palavra em que o cursor está.

Os comandos "interno" e "a" são ótimos no Vim, tente também "ci {" dentro de um {} bloco, ou "ca {" se você também deseja remover os {} caracteres. Para traduzir esses comandos para o inglês e lembrá-los melhor, tente: "alterar bloco interno" e "alterar bloco {".

Documentação em http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Kaali
fonte
"caw" pode ser usado no lugar da mesma funcionalidade "ciw".
Amjith
Enquanto 'caw' e 'ciw' substituirão a palavra inteira, simplesmente 'cw' mudará da posição atual do cursor para o final da palavra atual.
Drew Stephens em
Eu editei a resposta de falar sobre "co {" para "ca {" conforme lembrado pelo comentário de jinxed_coders. Minha personalização antiga implementa comandos "(a) <>" como comandos "(o) uter <>".
Kaali,
19
ciwe cawnão são exatamente iguais: ciwexclui apenas a palavra, cawexclui o espaço à direita também.
Roberto Bonvallet,
5
: objetos de ajuda no vim para ler mais sobre esses tipos de seleções.
Aaron
19

Resposta à sua pergunta de acompanhamento: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
muito php
fonte
3
Como alguém faria isso várias vezes seguidas? Cada vez que você cola, o buffer é preenchido com a palavra que colei.
Ben Gartner,
1
@BenGartner Encontrou isso no wiki do Vim Tips : Use yiwpara copiar a palavra atual, coloque o cursor sobre a palavra a ser substituída, use ciw<C-r>0. Depois disso, você pode colocar o cursor na próxima palavra e usar .para refazer a substituição.
siegi
@BenGartner Se tudo o que você está tentando fazer é substituir todas as instâncias de WORD_A por WORD_B, basta usar o modo ex do vim :%s/a/b/g,. apode ser um texto exato ou uma expressão regular, e bé o que você substituirá por todas as correspondências a. Você pode testar regexes com o /modo do vim . Substitua %por um número de linha ou intervalo se você não quiser substituir em todas as linhas.
Braden Best de
8

Para a segunda pergunta: bPldw

Isso irá, em ordem, levá-lo para o início da palavra atual, inserir o registro padrão na frente do cursor, ir para o próximo caractere (levando-o além do final do texto que você acabou de inserir) e deletar o resto do a palavra.

Hank Gay
fonte
5
isso também exclui o espaço após a palavra. Deve ser bPlde.
0x89
10
Não, deveria serviwp
aehlke
3

Para a primeira pergunta, bcwtambém trabalhe. Significa " back no início da palavra, change word". Mas eu acho que ciwé mais memorável, que significa " change iNNER word", apenas apenas um passo.

Para a segunda pergunta sobre "substituir usando colar", minha solução é "_diwP. Ele delete iNNER word para um registo que não se importam e pAste conteúdo do registo padrão. Uma vantagem é que você pode colar o registro padrão muitas vezes, porque não seria poluído. É um pequeno complexo, então mapeio como nnoremap ,r "_diwP.

Justme0
fonte
2

Ou talvez você possa usar a sequência de teclas bdwipara excluir a palavra atual e entrar no modo INSERT.

Ayaz
fonte
1
Você pode usar bcwpara ir para o início da palavra atual e alterar a palavra, o que deixa você no modo de inserção.
Hank Gay,
Se o cursor já estiver no primeiro caractere da palavra, isso acabará apagando a palavra anterior.
Warren Pena
3
@WarrenPena Nesse caso, basta usar dwi. Apenas tome cuidado para que os policiais não percebam, já que DWI é ilegal na maioria dos estados.
Braden Best