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).

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


"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.

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.


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.


2

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.