Comment supprimer un mot et passer en mode insertion dans Vim?

98

En mode normal, je peux frapper Ctrl+ Equi supprime le reste du mot courant et passe en mode insertion.

Je souhaite supprimer le mot entier, quelle que soit la position du curseur (dans le mot bien sûr).

Joernsn
la source

Réponses:

164

Vous pouvez utiliser «changer le mot interne» en tapant «ciw» pour supprimer un mot sur lequel se trouve le curseur.

Les commandes "inner" et "a" sont excellentes dans Vim, essayez également "ci {" dans un bloc {}, ou "ca {" si vous souhaitez également supprimer les caractères {}. Pour traduire ces commandes en anglais afin de mieux les mémoriser, essayez: "change inner {block" et "change a {block".

Documentation sur http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Kaali
la source
"caw" peut être utilisé à la place de "ciw" même fonctionnalité.
Amjith le
Alors que «caw» et «ciw» remplaceront le mot entier, simplement «cw» changera de la position actuelle du curseur à la fin du mot actuel.
Drew Stephens le
J'ai modifié la réponse de "co {" à "ca {" comme l'a rappelé le commentaire de jinxed_coders. Mon ancienne personnalisation implémente des commandes "(a) <>" comme des commandes "(o) uter <>".
Kaali
19
ciwet cawne sont pas exactement les mêmes: ciwsupprime uniquement le mot, cawsupprime également l'espace de fin.
Roberto Bonvallet
5
: aidez les objets dans vim à en savoir plus sur ces types de sélections.
Aaron
19

Répondez à votre question de suivi: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
trop de php
la source
3
Comment ferait-on cela plusieurs fois de suite? Chaque fois que vous collez, la mémoire tampon se remplit du mot que j'ai collé.
Ben Gartner
1
@BenGartner Trouvé ceci sur le wiki de Vim Tips : Utilisez yiwpour copier le mot actuel, placez le curseur sur le mot à remplacer, utilisez ciw<C-r>0. Après cela, vous pouvez placer le curseur sur le mot suivant et utiliser .pour refaire le remplacement.
siegi
@BenGartner Si tout ce que vous essayez de faire est de remplacer toutes les instances de WORD_A avec WORD_B, vous utilisez simplement le mode ex vim, :%s/a/b/g. apeut être du texte exact ou une expression régulière, et bc'est ce que vous remplacerez toutes les correspondances apar. Vous pouvez tester les expressions régulières avec le /mode de vim . Remplacez %par un numéro de ligne ou une plage si vous ne souhaitez pas remplacer toutes les lignes.
Braden Best
8

Pour la deuxième question: bPldw

Cela vous amènera, dans l'ordre, au début du mot actuel, insérera le registre par défaut devant le curseur, passera au caractère suivant (vous amènera au-delà de la fin du texte que vous venez d'insérer) et supprimera le reste de le mot.

Hank Gay
la source
5
cela supprime également l'espace après le mot. Devrait être bPlde.
0x89 le
10
Non, devrait êtreviwp
aehlke
3

Pour la première question, bcwtravaillez également. Cela signifie " bAccepter le début du mot, csuspendre word". Mais je pense que ciwc'est plus mémorable, ce qui signifie " change innerw ord", juste un pas.

Pour la deuxième question sur "remplacer en utilisant de la pâte", ma solution est "_diwP. Il delete inner word à vous inscrire et ne se soucient pas pAste le contenu du registre par défaut. Un avantage est que vous pouvez coller le registre par défaut plusieurs fois, car il ne serait pas pollué. C'est un petit complexe donc je le mappe comme nnoremap ,r "_diwP.

Justme0
la source
2

Ou, vous pouvez peut-être utiliser la séquence de touches bdwipour supprimer le mot actuel et passer en mode INSERT.

ayaz
la source
1
Vous pouvez utiliser bcwpour aller au début du mot actuel puis changer le mot, ce qui vous laisse en mode insertion.
Hank Gay
Si votre curseur est déjà sur le premier caractère du mot, cela finira par supprimer le mot précédent.
Warren Pena
3
@WarrenPena Dans ce cas, utilisez simplement dwi. Faites juste attention à ce que les flics ne le remarquent pas, car DWI est illégal dans la plupart des États.
Braden Best