Как добавить текст в конец строки в Gvim или vi - PullRequest
3 голосов
/ 17 ноября 2011

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

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

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

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

Спасибо

Ответы [ 3 ]

10 голосов
/ 17 ноября 2011

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

4 голосов
/ 17 ноября 2011

Если вы выберете блок (используя 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 , к тексту будет добавлен префикс.

2 голосов
/ 17 ноября 2011

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

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