vi raccourci pour supprimer “jusqu'au prochain caractère X”

194

Je comprends que vi a des raccourcis clavier pour supprimer des caractères, des mots et des lignes avec diverses options.

Cependant, je n'ai pas pu trouver ceci:

  • supprimer du curseur jusqu'au prochain caractère spécifié

Par exemple, je pourrais taper du"que l’éditeur est censé "supprimer jusqu’à "trouver le prochain caractère"

Le plus proche que je connaisse est d9w9est le nombre de mots à supprimer.

Est-ce que quelqu'un sait si c'est possible?

kctang
la source
Si Vi et Vim vous intéressent, ils ont maintenant leur propre site SE: Vi et Vim
dessert, le

Réponses:

303

Utilisez dtc, où c est n’importe quel caractère, par exemple pour vous, vous voulezdt"

Ceci supprimera jusqu'à mais sans inclure c .

Si tu avais:

delete until exclamation point!

Et le curseur était au premier espace et vous avez tapé dt!, vous auriez:

delete!

Aussi dfc.

Cela supprimera jusqu'à et y compris c .

Utiliser df!le même exemple ci-dessus vous donnerait:

delete

À peu près tout « mouvement » peut être utilisé pour les d, c, yet des commandes similaires.

Arcege
la source
7
Vraisemblablement, le mnémonique est t pour "till"? Bonne réponse.
Overthink
15
Vous pouvez également supprimer l’instance précédente d’un personnage avec la version en majuscule des commandes de mouvement. Peut-être plus utile pour les virgules - dT,et dF,.
joelostblom
3
Cela ne fonctionne pas sur plusieurs lignes.
0xcaff
3
Cela peut-il être fait sur une plage de lignes?
Ray
2
Pour faire quelque chose de similaire sur une plage de lignes, une recherche habituelle (comme dans la réponse de zpletan) peut être effectuée: d/wordrecherches jusqu'à word. Il doit être suivi de enter (pour fermer la recherche).
Eric O Lebigot
59
  • Pour supprimer le type de caractère 'X' dtX

  • Pour supprimer un caractère de type 'X' dfX

  • Pour supprimer en arrière jusqu'au caractère 'X' dTX

  • Pour supprimer le caractère 'X' en arrière dFX

Mark Wong
la source
30

L'entrée dt # (pas une commande: utilisez-la comme un mouvement comme G)

supprimera du curseur jusqu’à ce que le # ne soit pas inclus. Vous pouvez remplacer n'importe quel caractère par #.

Jessie
la source
2
C'est la bonne réponse! df # supprimera aussi #.
Viet
été à la recherche de cela, c'est génial
Nadeem Khedr
18

On dirait que @Arcege a déjà répondu à la question, mais je l’ai effacé d/ljusqu’au caractère l; d'autres personnages fonctionneraient aussi bien.

zpletan
la source
3
Cela fonctionne pour les choses à travers les nouvelles lignes.
jasonszhao
Remarque: ceci doit être suivi de Enter.
Eric O Lebigot
6

wpasse au mot suivant. lpasse au personnage suivant.

Donc, c'est d9lpour supprimer les 9 caractères suivants.

Shun Zhang
la source
2
Close lest la flèche droite de Vim. Vous supprimez donc droit. Inversement, d9hsupprimerait 9 caractères restants.
Walf