supprimer le mot après ou autour du curseur dans VIM

Je passe maintenant à VIM de TextMate. J’ai trouvé ^ + W en mode insertion très utile. Cependant, je voudrais supprimer non seulement le mot avant le curseur, mais aussi le mot après ou autour du curseur.

J’ai fait quelques recherches sur Google, mais la seule chose que je pouvais trouver était que ^ + W supprimait le mot AVANT le curseur …

Ce que vous devez faire est de créer un imap d’une certaine clé pour une série de commandes, dans ce cas les commandes vous déposent en mode normal, suppriment le mot actuel et vous remettent ensuite en insertion:

:imap  diwi 

Mode normal:

 daw : delete the word under the cursor caw : delete the word under the cursor and put you in insert mode 

Je pense que c’est juste daw

 daw - delete a word 

Ce qui suit fonctionne pour le mode normal: Je suis d’accord avec la réponse de Dan Olson, à savoir que 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 (ne comprend pas les espaces)
daw à supprimer autour du mot (y compris les espaces avant le mot suivant).

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

Cela peut être multiplié en ajoutant les nombres habituels pour le mouvement, par exemple 2w pour avancer de 2 mots, ainsi d2w supprime 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 sur la ligne de départ. À la fin d’un mot ^ w fonctionne bien pour supprimer rapidement le mot. Si vous êtes passé en mode insertion, entrez du texte et utilisez les touches fléchées pour vous retrouver au milieu du mot que vous avez choisi, contrairement à la philosophie de la ligne mère.
Si vous êtes en mode normal et que vous voulez changer le mot, vous pouvez simplement utiliser le c (modifier) ​​plutôt que d (supprimer) si vous souhaitez changer complètement le mot et revenir en mode insertion sans avoir à appuyer sur i revenir à la dactylographie.

Voulez-vous dire comme?

 dw 

Il ne semble pas y avoir de façon intégrée de le faire en mode insertion, ce qui était la question. Certaines des autres réponses sont correctes pour le mode normal, tout en indiquant qu’un mappage personnalisé pourrait être créé pour append la fonctionnalité en mode insertion.

Honnêtement, vous devriez probablement faire la plupart de vos suppressions en mode normal. ^ W est sage de le savoir mais je ne suis pas sûr de pouvoir penser à une situation où je préfère le faire plutôt que d’écouter pour passer en mode normal et disposer des commandes de suppression plus puissantes.

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

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

 daW 

Pour supprimer un seul mot:

 daw 

Pour supprimer le mot entier, votre curseur est utilisé
Pour supprimer le mot entier sur ciw votre curseur et vous mettre en mode insertion, utilisez ciw
si vous ne voulez pas supprimer le mot entier mais effacez d’où vous êtes le dw/cw

Le mode d’insertion n’a pas une telle commande, malheureusement. Dans VIM, pour supprimer le mot entier sous le curseur, vous pouvez taper viwd en mode NORMAL. Ce qui signifie ” V isual-block I nner W ord D elete”. Utilisez une majuscule W pour inclure la ponctuation.

Pour supprimer un certain nombre de caractères avant le curseur, vous pouvez utiliser X. Pour supprimer un certain nombre de mots après le curseur, vous pouvez utiliser dw (plusieurs mots peuvent être supprimés avec 3dw pour 3 mots par exemple). Pour supprimer le curseur en général, vous pouvez utiliser daw.

Vous ne savez pas exactement comment utiliser “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 dans les docs, ctrl-w semble être tout ce qu’il y a.

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  bdw noremap  bdw 

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

J’ai effectué deux mappages pour obtenir une cohérence dans le mode d’insertion et de sortie d’insertion.

:map <'Key of your choice'> caw

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

Dans l’ancien vi, b déplace le curseur au début du mot avant 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 supprime du curseur jusqu’à la fin 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.

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

Dans ce cas, la solution proposée par OP (c.-à-d. En utilisant ) peut être combinée avec la réponse acceptée pour donner:

 inoremap  daw 

alternativement (solution plus courte):

 inoremap  vawobd 

Échantillon d’entrée:

 word1 word2 word3 word4 ^------------- Cursor location 

Sortie:

 word1 word4