72 votes

Comment supprimer jusqu'au prochain caractère non vide dans vim ?

Je suis à la recherche d'une commande pour supprimer du curseur au premier caractère non espace sur la même ligne. J'ai cherché sur Google pendant un moment et essayé plusieurs possibilités. Aucune chance. Est-ce que quelqu'un sait comment faire cela ?

111voto

richardolsson Points 2967

La séquence dw supprimera tous les caractères du curseur jusqu'au prochain mot. Cela signifie que si vous exécutez la commande alors que vous êtes au milieu d'un mot, elle supprimera le reste de ce mot et les espaces blancs suivants. Peut-être pas ce que vous recherchez.

2 votes

Cela fonctionne. C'est un peu contre-intuitif - je m'attendais à ce que dw signifie "supprimer le mot actuel, en commençant par le curseur". Mais ça fonctionne, ça fonctionne. Merci.

0 votes

Comme d'habitude, vous pouvez également faire d2w, d3w et c pour supprimer tous les caractères jusqu'au deuxième ou au troisième mot après le curseur. Si cette réponse a résolu votre problème, veuillez l'accepter comme correcte.

22 votes

+1. Pour être précis, w signifie "se déplacer au début du mot suivant", et d supprime de la position actuelle à où le mouvement vous emmène.

25voto

Cy Rossignol Points 10899

Beaucoup des réponses ici n'abordent pas vraiment la question directement. L'auteur veut savoir comment supprimer jusqu'au premier caractère non-espace. Certaines des réponses peuvent techniquement fonctionner, mais regardons comment faire cela explicitement.

Les exemples suivants démontrent comment faire cela en mode normal avec des variations qui tiennent compte de la position de départ du curseur. Les c̲aractères s̲oulignés indiquent la position du curseur :


     dw:   foo_     bar   →   foob̲ar

La commande delete word, décrite dans d'autres réponses, fonctionne très bien pour supprimer jusqu'au prochain caractère non-espace lorsque notre curseur est positionné avant la cible.


     db:   foo      b̲ar   →   b̲ar

Naturellement, nous voudrions essayer l'inverse de dw pour supprimer en arrière jusqu'au premier caractère non-espace avant le curseur. Cependant, comme montré ci-dessus, la commande delete back-word supprime plus que ce que l'on attend - elle efface également le mot précédent. Pour ce cas, nous devrions utiliser :

     dT:   foo      b̲ar   →   foob̲ar

...où est le premier caractère non-espace avant le curseur. La commande delete back-unTil efface tout jusqu'à mais sans inclure le caractère , qui, dans ce cas, est le caractère o à la fin de "foo".


     dt:   foo_     bar   →   foob̲ar

Similaire à la commande précédente, nous pouvons utiliser delete until (avec un "t" minuscule) pour supprimer des caractères en avant jusqu'au prochain caractère (le b dans "bar", par exemple). Cela atteint le même résultat que dw dans le but de cette question.


     diw:   foo   _   bar   →   foob̲ar

Si notre curseur est positionné au milieu de l'espace, nous pouvons utiliser la commande delete inner word pour supprimer l'espace des deux côtés.


     d/:   foo_   \n   bar   →   foob̲ar

Si l'espace que nous voulons supprimer inclut des sauts de ligne, nous pouvons utiliser la commande indiquée ci-dessus pour delete until matched pattern of , où le pattern dans ce cas est juste le premier caractère non-espace. Comme montré, appuyez sur Enter pour compléter cette commande.

Lorsque le premier caractère non-espace se trouve au début de la ligne après le saut, Vim supprimera l'espace, mais la cible restera sur la ligne suivante. Nous devons ajouter J à la commande ci-dessus pour Join les lignes (un "j" majuscule).

     d/J:   foo_     \nbar   →   foob̲ar

24voto

sidyll Points 20176

Vous voudrez peut-être essayer dW. Cela permettra de se déplacer par "MOT" (voir l'aide pour MOT et mot), ce qui semble plus approprié pour votre question.

Le dw ne répondra pas à vos besoins dans, par exemple:

array[1] = 5

En appuyant sur dw alors que vous êtes positionné sur le a vous laissera avec:

[1] = 5

Mais en utilisant dW donnera comme résultat:

= 5

7voto

Fredrik Pihl Points 20944

Pour supprimer un mot indépendamment de la lettre sur laquelle se trouve le curseur, utilisez daw (mnémonique "delete a word") fonctionne également avec d'autres commandes, par ex. caw "change a word". f et t sont d'autres excellentes commandes qui peuvent être utilisées en combinaison avec d. Par exemple, pour supprimer du curseur jusqu'à la première occurrence de la lettre "t", utilisez dft. Pour laisser le "t" intact, utilisez dtt à la place.

3voto

lucapette Points 13109

dw devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X