Comment puis-je obtenir une variable de compteur dans Vim sans python ni ruby ​​?

StackOverflow https://stackoverflow.com/questions/895663

  •  23-08-2019
  •  | 
  •  

Question

Je n'ai PAS activé python/ruby.Ma question:Je dois fréquemment écrire des choses comme celles-ci :

%macro(200701);x gzip /home/test/200701.txt;run;
%macro(200702);x gzip /home/test/200702.txt;run;
%macro(200703);x gzip /home/test/200703.txt;run;
%macro(200704);x gzip /home/test/200704.txt;run;
%macro(200705);x gzip /home/test/200705.txt;run;
%macro(200706);x gzip /home/test/200706.txt;run;
%macro(200707);x gzip /home/test/200707.txt;run;
%macro(200708);x gzip /home/test/200708.txt;run;
%macro(200709);x gzip /home/test/200709.txt;run;
%macro(200710);x gzip /home/test/200710.txt;run;
%macro(200711);x gzip /home/test/200711.txt;run;
%macro(200712);x gzip /home/test/200712.txt;run;

%macro(200801);x gzip /home/test/200801.txt;run;
%macro(200802);x gzip /home/test/200802.txt;run;
%macro(200803);x gzip /home/test/200803.txt;run;
%macro(200804);x gzip /home/test/200804.txt;run;
%macro(200805);x gzip /home/test/200805.txt;run;
%macro(200806);x gzip /home/test/200806.txt;run;
%macro(200807);x gzip /home/test/200807.txt;run;
%macro(200808);x gzip /home/test/200808.txt;run;
%macro(200809);x gzip /home/test/200809.txt;run;
%macro(200810);x gzip /home/test/200810.txt;run;
%macro(200811);x gzip /home/test/200811.txt;run;
%macro(200812);x gzip /home/test/200812.txt;run;

Existe-t-il un moyen rapide de le faire dans Vim ?

Je tape généralement :

%macro(200701);x gzip /home/test/200701.txt;run;

Exécutez ensuite les commandes suivantes :

yy11p10<up>13<right>r2<down>r3<down>r4<down>...

Donc, en d'autres termes, je colle la ligne 11 fois de plus, puis j'utilise la commande "replace char" pour parcourir la liste des dates.Ensuite, je copierai tout le bloc et dans le nouveau bloc je taperai

:s/2007/2008/<enter>12&11<up>12&

remplacer 2007 par 2008 dans le deuxième bloc.

Vim est tellement puissant que je pense qu'il doit y avoir un meilleur moyen que de remplacer constamment manuellement 1 à 12 sur chacune des lignes.

Était-ce utile?

La solution

Écrivez la première ligne :

%macro(200701);x gzip /home/test/200701.txt;run;

Ensuite, toujours sur cette ligne, passez en mode commande et enregistrez une macro un qui copie la ligne (yyp), incrémente le premier nombre (ctrl-a, écrit ^A), déplace un caractère vers la droite (l) puis incrémente l'autre nombre :

qayyp^Al^Aq

(Notez que le démarrage et l'arrêt de l'enregistrement de macros se produisent avec q.) Maintenant, lisez la macro un 110 fois :

110@a

Autres conseils

Cela peut également être fait avec les fonctions vim 7 :

:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"')
:put=t

Si vous avez les utilitaires UNIX / Linux Core à votre disposition, il existe un moyen plus facile à retenir, au moins si vous êtes habitué à utiliser les commandes de blocs:

(1) Générer la séquence en utilisant seq(1)

:r!seq 200801 200812

seq permet également un formatage comme ceci :

:r!seq -f "\%03.0f"  10 121

Le signe pour cent doit être échappé.

(2) Doublez ce bloc avec les commandes du bloc Vim :Marquez avec C-v, tirez, mettez

(3) Insérez (ou ajoutez) le texte entre ces blocs :Marquer avec C-V, insérer avec I

Voir :help blockwise-visual pour en savoir plus.

Regarde aussi Conseil Vim#150.

Ceci explique comment marquer un bloc de texte et augmenter automatiquement les nombres dans le bloc marqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top