2009-09-04 11 views
86

En mode normal, je peux frapper Ctrl + E qui supprime le reste du mot courant et passe en mode insertion.Comment supprimer un mot et passer en mode insertion dans Vim?

Je veux supprimer le mot entier, indépendamment de la position du curseur (dans le mot bien sûr). Aussi - comment puis-je remplacer le mot courant par ce qui est dans le registre par défaut?

Répondre

146

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 aussi "ci {" dans un bloc {}, ou "ca {" si vous souhaitez aussi 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 à http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

+0

" caw "peut être utilisé à la place de" ciw "même fonctionnalité. – Amjith

+0

Alors que 'caw' et 'ciw' remplaceront le mot entier, simplement 'cw' changera de la position actuelle du curseur à la fin du mot courant. –

+0

J'ai édité la réponse de dire à propos de "co {" à "ca {" comme le rappelle le commentaire de jinxed_coders. Mon ancienne personnalisation implémente les commandes "(a) <>" en tant que commandes "(o) uter <>". – Kaali

8

Pour la deuxième question: bPldw

Cette volonté, dans l'ordre, vous prenez au début du mot courant, insérez le registre par défaut devant le curseur, aller au caractère suivant (qui vous passé la fin du texte que vous venez d'insérer), et supprimez le reste du mot.

+5

cela supprime également l'espace après le mot. Devrait être 'bPlde'. – 0x89

+9

Non, devrait être 'viwp' – aehlke

2

Ou, vous pourriez peut-être utiliser la séquence de touches bdwi pour supprimer le mot en cours et passer en mode insertion.

+1

Vous pouvez utiliser 'bcw' pour aller au début du mot actuel puis changer le mot, ce qui vous laisse le mode d'insertion. –

+0

Si votre curseur est déjà sur le premier caractère du mot, cela finira par supprimer le mot précédent. –

+3

@WarrenPena Dans ce cas, utilisez 'dwi'. Faites juste attention à ce que les flics ne s'en aperçoivent pas, car DWI est illégal dans la plupart des états. –

18

Réponse à 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. 
+2

Comment ferait-on cela plusieurs fois de suite? Chaque fois que vous collez, le tampon se remplit du mot que j'ai collé. –

+1

@BenGartner Trouvé sur [Vim Tips wiki] (http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method): Utilisez 'yiw' pour copier le mot actuel, placez le curseur sur le mot à remplacer, utilisez' ciw 0'. Après cela, vous pouvez placer le curseur sur le mot suivant et utiliser '.' pour refaire le remplacement. – siegi

+0

@BenGartner Si tout ce que vous essayez de faire est de remplacer toutes les instances de WORD_A par WORD_B, alors vous utilisez simplement le mode ex de vim, ':% s/a/b/g'. 'a' peut être du texte exact, ou une expression régulière, et' b' est ce que vous allez remplacer avec tous les résultats de 'a'. Vous pouvez tester les regex avec le mode '/' de vim. Remplacez '%' par un numéro de ligne ou une plage si vous ne souhaitez pas remplacer toutes les lignes. –

2

Pour la première question, bcw également. Cela signifie "b ack au début du mot, c hange w ord". Mais je pense que ciw est plus mémorable, ce qui signifie "c hange i nner w ord", juste un seul pas.

Pour la deuxième question à propos de "remplacer en utilisant la pâte", ma solution est "_diwP. Il d elete i nner w ord dans un registre que vous ne vous souciez pas et p aste 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 cartographie comme nnoremap ,r "_diwP.

Questions connexes