web-dev-qa-db-fra.com

Comment supprimer jusqu'à ce qu'il n'y ait pas d'espace dans vim?

Je recherche une commande à supprimer du curseur vers le premier caractère non blanc sur la même ligne. J'ai googlé pendant un certain temps et essayé plusieurs possibilités. Pas de joie. Quelqu'un sait-il comment faire cela?

56
Singlestone

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

89
richardolsson

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

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

array[1] = 5

Frapper dw en position dans le a vous laissera:

[1] = 5

Mais l'utilisation de dW entraînera:

= 5
19
sidyll

Beaucoup de réponses ici ne répondent pas vraiment directement à la question. Le demandeur veut savoir comment supprimer jusqu'au premier non - caractère d'espacement. Certaines des réponses fonctionneront techniquement, mais examinons comment le faire explicitement.

Les exemples suivants montrent comment procéder en mode normal avec des variations qui tiennent compte de la position de départ du curseur. Les caractères c soulignés indiquent la position du curseur:


 dw: Foo_ bar → foob̲ar

Le delete wla commande ord , décrite dans d'autres réponses, fonctionne très bien pour supprimer jusqu'au caractère non blanc suivant lorsque notre curseur est positionné avant la cible.


 db: Foo b̲ar → b̲ar

Naturellement, nous voudrions essayer l'inverse de dw pour supprimer vers l'arrière jusqu'au premier caractère non blanc avant le curseur. Cependant, comme indiqué ci-dessus, le delete bla commande ack-Word supprime plus que prévu - elle efface également le mot précédent. Pour ce cas, nous devons utiliser:

 dT<?>: Foo b̲ar → foob̲ar

...où <?> est le premier caractère non blanc avant le curseur. Le delete back-unTla commande il efface tout jusqu'au caractère mais pas le <?>, qui, dans ce cas, est le caractère o à la fin de "foo".


 dt<?>: Foo_ bar → foob̲ar

Semblable à la commande précédente, nous pouvons utiliser delete until (avec un "t" minuscule) pour supprimer les caractères en avant jusqu'à la prochaine <?> caractère (le b dans "bar", pour cet exemple). Cela donne le même résultat que dw aux fins de cette question.


 diw: Foo _ bar → foob̲ar

Si notre curseur est positionné au milieu de l'espace, nous pouvons utiliser le 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 comprend des sauts de ligne, nous pouvons utiliser la commande ci-dessus pour dsupprimer jusqu'à ce que le motif de <?>, où le motif dans ce cas n'est que le premier caractère non blanc. Comme illustré, appuyez sur Enter pour terminer cette commande.

Lorsque le premier caractère non espace apparaît au début de la ligne après la coupure, Vim supprimera l'espace, mais laissera la cible 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

13
Cy Rossignol

Pour supprimer un mot quelle que soit la lettre sur laquelle se trouve le curseur, utilisez daw (mnémonique "supprimer un mot") fonctionne également avec d'autres commandes, par ex. caw "changer un mot". f et t sont d'autres excellentes commandes qui peuvent être utilisées avec d. Par exemple. pour supprimer du curseur jusqu'à et y compris la première occurrence de par ex. la lettre "t", utilisez dft. Pour laisser le "t" intact, utilisez dtt au lieu.

7
Fredrik Pihl

dw devrait marcher.

3
lucapette