Как добавить текст в конец строки в Gvim или vi

Я использую gvim для окон и имею файл с несколькими строками, которые выглядят как

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

Я хотел бы добавить следующую строку в конце каждой строки.

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

Результат должен выглядеть примерно так (обратите внимание, что имя [TableName] заменяется фактическим именем таблицы.

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')

Я могу добавить текст в конце, просто сделав

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

Но я зациклился на том, как я могу прочитать имя таблицы и поместить это вместо [Tablename].

В основном я просто пытаюсь сгенерировать несколько запросов. Есть идеи? Я знаю, что имя таблицы всегда будет текстом от конца строки до первого символа, но как его прочитать и добавить в измененную строку?

Спасибо

3 ответа

Вам нужно сделать небольшую часть обратной ссылки. Измените поисковый запрос на: \(\a\+\)$ это будет соответствовать имени таблицы. Окружающий поисковый запрос \( и \) позволяет ссылаться на замену Добавьте \1 в строку замены везде, где вы хотите, чтобы отображалось имя табуляции. Результат должен выглядеть так: %s/\(\a\+\)$/\1', count(*) from [\1] where msgid in (select msgid from mainTable where row_dtm<'17NOV11')/g


Если вы выберете блок (используя CTRL + V (подумал, что может возникнуть проблема, если вы находитесь в Windows), вы можете добавить текст ко всем строкам в блоке с помощью A.

Например, предположим, что я выбрал код, который находится в жирным курсивом ниже:

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

И теперь я печатаю A и текст bla, за которым следует ESC.

Результат:

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

Аналогично, если вы наберете I вместо A, текст будет добавлен.


Вы всегда можете записать макрос, изменяющий строку, и перейти к следующему, а затем воспроизвести этот макрос:

qq$bywA', count(count(*) from <esc>pAwhere msgid in (select msgid from mainTable where row_dtm<'17NOV11')<esc>jq2@q
</esc></esc>
  • qq → начните запись макроса в регистре q.
  • $ → перейти к концу строки.
  • b → вернуться к началу предыдущего слова.
  • yw → слово yank.
  • Afoo → добавьте "foo" в конце строки, вставьте режим вставки с помощью клавиши .
  • p → вставить дернутое слово.
  • Afoo → добавьте "foo" в конце строки, вставьте режим вставки с помощью клавиши .
  • j → перейти к следующей строке.
  • q → завершение макросъемки.
  • 2@q → повторить макрос в регистре q 2 раза.

licensed under cc by-sa 3.0 with attribution.