web-dev-qa-db-fra.com

supprimer Word après ou autour du curseur dans VIM

Je passe maintenant à VIM de TextMate. J'ai trouvé ^+W en mode INSERT très utile. Cependant, j'aimerais supprimer non seulement le mot avant le curseur, mais également le mot après ou autour du curseur.

J'ai fait quelques recherches sur Google, mais la seule chose que je puisse trouver, c'est ^+W pour supprimer Word avant curseur.

180
Mantas

Ce que vous devez faire est de créer une imap d'une certaine clé à une série de commandes. Dans ce cas, les commandes vous laisseront passer en mode normal, supprimeront le mot actuel et vous remettront en insertion:

:imap <C-d> <C-[>diwi
73
Whaledawg

Mode normal: 

daw : delete the Word under the cursor    
caw : delete the Word under the cursor and put you in insert mode 
483
Amjith

Je pense que c'est juste daw

daw - delete a Word
89
steve

Ce qui suit fonctionne pour le mode normal: Je suis d’accord avec la réponse de Dan Olson selon laquelle vous devriez probablement être en mode normal pour la plupart des suppressions. Plus de détails ci-dessous.

Si le curseur est à l'intérieur du mot:
diw à supprimer dans le mot (n'inclut pas les espaces)
daw à supprimer autour du mot (inclut les espaces avant le mot suivant).

Si le curseur est au début du mot, appuyez simplement sur dw.

Ceci peut être multiplié en ajoutant les nombres habituels pour le mouvement, par ex. 2w pour avancer de 2 mots, d2w supprime donc deux mots.

Mode d'insertion ^ w
L’idée d’utiliser hjkl pour le mouvement dans Vim est qu’il est plus productif de garder les mains dans l’arrière. À la fin d'un mot, w fonctionne très bien pour supprimer rapidement le mot. Si vous êtes en mode insertion, entrez du texte et utilisez les touches fléchées pour vous retrouver au milieu du mot que vous êtes allé à l'encontre de la philosophie de la ligne d'arrivée.
Si vous êtes en mode normal et que vous souhaitez modifier le mot, vous pouvez simplement utiliser la variable c (modifier) ​​plutôt que d (supprimer) si vous souhaitez modifier complètement le mot, puis entrez à nouveau en mode insertion sans avoir appuyer sur i pour revenir à la saisie.

65
Andy

Tu veux dire comme?

dw
40
Nadia Alramli

Il ne semble pas y avoir de méthode intégrée pour le faire en mode insertion, ce qui était la question. Certaines des autres réponses sont correctes pour le mode normal, tout en soulignant qu'un mappage personnalisé pourrait être créé pour ajouter la fonctionnalité en mode insertion.

Honnêtement, vous devriez probablement faire la plupart de vos suppressions en mode normal. ^ W est intéressant à savoir, mais je ne suis pas sûr de pouvoir penser à une situation dans laquelle je préférerais le faire plutôt que de me mettre en mode normal et de disposer des commandes de suppression plus puissantes.

Vim est très différent de plusieurs autres éditeurs (y compris TextMate) en ce sens. Si vous l'utilisez de manière productive, vous constaterez probablement que vous ne passez pas beaucoup de temps en mode insertion.

20
Dan Olson

Pour supprimer tous caractères entre deux espaces, en mode normal:

daW

Pour supprimer un seul mot:

daw 
17
krmld

Pour supprimer le mot entier sur lequel votre curseur est en utilisation, utilisez diw 
Pour supprimer le mot entier sur lequel se trouve votre curseur et pour vous placer en mode insertion, utilisez ciw 
si vous ne voulez pas supprimer le mot entier mais le supprimer de l'endroit où vous êtes le dw/cw

12
Naseeruddin V N

Le mode insertion n'a malheureusement pas cette commande. Dans VIM, pour supprimer le mot entier sous le curseur, vous pouvez taper viwd en mode NORMAL. Ce qui signifie "Visual-blockInnerWordDelete". Utilisez une majuscule W pour inclure la ponctuation.

4
mycelo

Vous pouvez utiliser X pour supprimer un certain nombre de caractères avant le curseur. Pour supprimer un certain nombre de mots après le curseur, vous pouvez utiliser dw (vous pouvez supprimer plusieurs mots en utilisant 3dw pour 3 mots, par exemple). Pour supprimer autour du curseur en général, vous pouvez utiliser daw.

2
John T

Pas tout à fait sûr de votre utilisation de "avant" et "après", mais avez-vous essayé

dw

?

Edit: Je suppose que vous cherchez quelque chose à utiliser en mode insertion. Curieusement, il n'y a rien à trouver dans la documentation, ctrl-w semble être tout ce qu'il y a.

2
innaM

J'ai effectué deux correspondances afin d'obtenir une cohérence en mode insertion et en mode insertion.

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw

2
userFog

Dans l'ancien vi, b déplace le curseur au début du mot devant le curseur, w déplace le curseur au début du mot après le curseur, e déplace le curseur à la fin du mot après le curseur et dw le supprime du mot.

Si vous tapez wbdw, vous supprimez le mot autour du curseur, même si le curseur se trouve au début ou à la fin du mot. Notez que les espaces après un mot sont considérés comme faisant partie du mot à supprimer.

2
mouviciel

La réponse acceptée échoue lorsque vous essayez de répéter la suppression de mots, essayez plutôt cette solution:

" delete current Word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

Il mappe CTRL-BackSpace, fonctionnant également en mode normal.

2
R. Aguirre

Comme il existe de nombreuses façons de supprimer un mot, illustrons-les.

En supposant que vous éditez:

foo-bar quux

et invoquez une commande alors que le curseur est sur le "a" dans la barre:

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor
2
0xF

Je voudrais supprimer non seulement le mot avant le curseur, mais le mot après ou autour du curseur.

Dans ce cas, la solution proposée par OP (c'est-à-dire en utilisant <c-w>) peut être combinée avec la réponse acceptée pour donner:

inoremap <c-d> <c-o>daw<c-w>

alternativement (solution plus courte):

inoremap <c-d> <c-o>vawobd

Exemple de saisie:

Word1 Word2 Word3 Word4
               ^------------- Cursor location

Sortie:

Word1 Word4
0
Sergio