2010-02-20 2 views
0

J'ai un bloc de codes avec horodatage en face de chaque ligne comme celui-ci:Comment utiliser le texte correspondant dans le texte de remplacement dans vim

12/02/2010 12:20:12 function myFun() 
12/02/2010 12:20:13 {.... 

La première colonne est une valeur de temps de date. Je voudrais les commenter en utilisant Vim, ainsi:

/*12/02/2010 12:20:12*/ function myFun() 
/*12/02/2010 12:20:13*/ {.... 

J'ai essayé de rechercher la date d'abord:

/\d\d\/\d\d\/\d\d\d\d \d\d:\d\d:\d\d 

Je suis tous les horodatages marqués correctement. Cependant, lorsque j'ai essayé de les remplacer par la commande:

%s/\d\d\/\d\d\/\d\d\d\d \d\d:\d\d:\d\d/\/*\d\d\/\d\d\/\d\d\d\d \d\d:\d\d:\d\d*\// 

J'ai obtenu le résultat suivant:

/*dd/dd/dddd dd:dd:dd*/ function myFun() 
/*dd/dd/dddd dd:dd:dd*/ {.... 

Je pense que je dois nommer la partie de recherche et les remettre dans la partie remplacer. Comment je peux le faire?

Répondre

2
%s/\d\d\/\d\d\/\d\d\d\d \d\d:\d\d:\d\d/\/*&*\// 
+0

Nice. Ça fonctionne bien. Juste curieux, qu'est-ce que & ici? Est-ce la partie de recherche correspondant? Des informations sur le Web à ce sujet? –

+0

': h sous-remplacement-spécial' –

6

Je suppose que je voudrais juste faire quelque chose comme:

:%s-^../../.... ..:..:..-/* & */- 
+0

+1, toutes ces barres obliques inverses me donnent des maux de tête. –

0
:%s/^\([0-9/]* [0-9:]* \)\(.*\)/\/*\1*\/ \2/ 
4

Je ne nous fait un regex pour le faire. Cela prend trop de temps pour entrer le formatage correct. J'utiliserais plutôt un bloc visuel. La séquence fonctionne pour être quelque chose comme ça.

<C-V>}I/* <ESC> 
3f\s 
<C-V>I */ 

J'aime regex, et ne veulent pas frapper les solutions regex, mais trouver quand faire des choses avec des blocs pré-formatés, que cela est plus facile, et nécessite moins d'une diversion de la tâche réelle, qui ne cherche pas comment écrire une regex.