Supprimer du curseur jusqu'à la nième occurrence du caractère x

16

Je sais que je peux supprimer du curseur jusqu'à et y compris la première occurrence d'un caractère x avec d/x<CR>ou avec v/x<CR>dsi je veux voir la sélection en premier puis supprimer. Comment supprimer de la position actuelle du curseur jusqu'à la n ème occurrence de x ?

Par exemple, si le curseur se trouve après le premier espace dans

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada x

xx

et je tape une commande pour supprimer jusqu'au troisième x le résultat doit être:

yada
xx

Erwin Rooijakkers
la source

Réponses:

22

Tu peux faire :

wd4/x<Enter>

Si vous commencez en haut à gauche de votre texte

Explication

  • w : passer au début du mot suivant
  • d : supprimer
  • 4/x<Enter> : jusqu'à la 4ème occurrence de x

Si vous ne connaissez pas le nombre de fois que vous souhaitez le faire à l'avance, vous pouvez également le faire: d/x<Enter>puis appuyez sur .pour répéter

edi9999
la source
5
Conseil supplémentaire: Cela fonctionne aussi avec fet amis ( F, t, T, ;): par exemple , 2fxvous obtiendrez à la deuxième xou 2;répéterez la dernière ffois.
Martin Tournoij
1
@Carpetsmoker: Cela ne fonctionne que pour les lettres de la ligne actuelle.
Jürgen Krämer
5

Vous pouvez le faire en tapant

<n>df<x>

où:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x
kapil
la source
0
<n>macro 

est couramment utilisé dans vim pour répéter la macro "n" fois.

donc pour supprimer jusqu'à la 1ère occurrence de x, vous utiliseriez 1dfx. De même, pour supprimer jusqu'à la 3ème occurrence de x, vous utiliseriez 3dfx.

thenakulchawla
la source
1
Je pense que vous avez manqué le mot "macro": dans vim une macro est une séquence de clé enregistrée dans un registre et appelez avec @xxest votre registre. Vous faites référence à une commande en mode normal.
statox
Oui, je voulais dire une commande normale. Mais cela est également vrai pour une macro. Nous pouvons exécuter la macro n fois en ajoutant un nombre avant la macro.
thenakulchawla
1
Oui c'est vrai. Je soulignais simplement que ce <n>macron'est pas une notation standard dans vim pour les macros et que votre réponse utilise une commande de mode normal, elle est à peu près la même que celle de kapil.
statox
0

Donné:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

$indiquent les fins de lignes ( :set listmode), si le curseur est au début de la seconde yadadans la première ligne, nous devons d'abord revenir à l'espace précédent en utilisant h, pour l'inclure dans la suppression. Alors juste 4d/xEnter. En d'autres termes, juste un décompte devant d/x. Le résultat est exactement:

yada$
xx$
Kaz
la source