Comment append du texte à la fin d’une ligne dans Gvim ou vi

J’utilise gvim sur windows et j’ai un fichier avec plusieurs lignes qui ressemblent à ceci

Select '305','TableA Select '313','TableB Select '313','TableC 

Je voudrais append la ligne suivante à la fin de chaque ligne.

 ', count(*) from [Tablename] where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 

Le résultat devrait ressembler à ceci (notez que le [TableName] est remplacé par le nom de la table réelle.

 Select '305','TableA', count(*) from TableA where msgid in (select msgid from mainTable where row_dtm<'17NOV11') Select '313','TableB', count(*) from TableB where msgid in (select msgid from mainTable where row_dtm<'17NOV11') Select '313','TableC', count(*) from TableC where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 

Je peux append append le texte à la fin en faisant juste

 %s/$/', count(*) from [Tablename] where msgid in (select msgid from mainTable where row_dtm<'17NOV11')/g 

Mais je suis coincé quant à la façon dont je peux lire le nom de la table et le mettre à la place de [nom_table].

Fondamentalement, j’essaie juste de générer plusieurs requêtes. Des idées? Je sais que le nom de la table sera toujours le texte de la fin de la ligne au premier caractère, mais comment puis-je le lire et l’append à la chaîne modifiée?

Merci

Vous devez faire un peu de référencement.
Modifier le terme de recherche pour:
\(\a\+\)$ ceci correspondra au nom de la table. Entourer le terme de recherche avec \( et \) lui permet d’être référencé dans le remplacement
Ajoutez \ 1 à votre chaîne de remplacement où vous voulez que le nom de la table apparaisse.
Le résultat devrait ressembler à ceci
%s/\(\a\+\)$/\1', count(*) from [\1] where msgid in (select msgid from mainTable where row_dtm<'17NOV11')/g

Si vous sélectionnez un bloc (en utilisant CTRL + V (on peut penser que cela peut vous poser problème si vous êtes sous Windows), vous pouvez append du texte à toutes les lignes du bloc en utilisant A.

Par exemple, supposons que j’ai sélectionné le code en italique gras ci-dessous:

 Lorem ipsum dolor sit ame t, co nsectetur adipisicing elit, sed do eiusmod tempor inc ididu nt ut labore et dolore magna aliqua. Ut enim ad minim venia m, quis nostrud exercitation ullamco laboris nisi ut a liqui p ex ea commodo consequat. Duis aute irure dolor in repre henderit in voluptate velit esse cillum dolore eu fug iat n ulla pariatur. Excepteur sint occaecat cupidatat non pr oiden t, sunt in culpa qui officia deserunt mollit anim id e st la borum. 

Et maintenant, je tape A et le texte bla suivi de ESC .

Le résultat est:

 Lorem ipsum dolor sit ame t, co bla nsectetur adipisicing elit, sed do eiusmod tempor inc ididu bla nt ut labore et dolore magna aliqua. Ut enim ad minim venia bla m, quis nostrud exercitation ullamco laboris nisi ut a liqui bla p ex ea commodo consequat. Duis aute irure dolor in repre bla henderit in voluptate velit esse cillum dolore eu fug iat n bla ulla pariatur. Excepteur sint occaecat cupidatat non pr oiden bla t, sunt in culpa qui officia deserunt mollit anim id e st la bla borum. 

De même, si vous tapez I au lieu de A , le texte sera ajouté au début.

Vous pouvez toujours enregistrer une macro modifiant une ligne et passer à la suivante, puis relire cette macro:

 qq$bywA', count(count(*) from pAwhere msgid in (select msgid from mainTable where row_dtm<'17NOV11')jq2@q 
  • qq → commence à enregistrer une macro dans le registre q .
  • $ → aller en fin de ligne.
  • b → revenir au début du mot précédent.
  • yw → mot mot.
  • Afoo → ajoute “foo” en fin de ligne, termine le mode insertion avec la touche .
  • p → coller le mot coupé.
  • Afoo → ajoute “foo” en fin de ligne, termine le mode insertion avec la touche .
  • j → aller à la ligne suivante.
  • q → terminer l’enregistrement de macro.
  • 2@q → rejouer la macro dans le registre q 2 fois.