vim поиск-замена вопрос - PullRequest
       6

vim поиск-замена вопрос

0 голосов
/ 17 декабря 2009

У меня есть несколько линий трассировки в моем файле вида

M_TRACE(EV_TRACE_LEVEL_DEBUG, "some trace");

Я хочу преобразовать их в

M_TRACE(EV_TRACE_LEVEL_DEBUG, "%s: some trace", __FUNCTION__);

Однако у меня уже есть несколько трасс, которые также отображают имя функции.

Для преобразования я использую следующую команду

:%g/M_TRACE/s/"\(.*\)"/"%s: \1", __FUNCTION__/c

К сожалению, в некоторых местах имеется избыточная ФУНКЦИЯ .

Есть ли лучший способ сделать это?

Ответы [ 4 ]

1 голос
/ 18 декабря 2009

Вы можете сделать это одной командой:

:%g/M_TRACE/s/"\(.*\)"\(, __FUNCTION__\)\?/"%s: \1", __FUNCTION__/

Он заменит ", __FUNCTION__", если он уже присутствует, или просто добавит его, если его нет.

0 голосов
/ 17 декабря 2009

Я бы сделал это в два этапа: сначала замените часть внутри кавычек, затем замените ") на ", __FUNCTION__)

Однако, если вы хотите сделать это всего одной командой:

:%g/M_TRACE/s/"\(.*\)".*/"%s: \1", __FUNCTION__);  
0 голосов
/ 18 декабря 2009

Если у вас есть несколько (дюжина), вы можете просто выполнить интерактивный поиск / замену, используя i интерактивный режим:

:%g/M_TRACE/s/"\(.*\)"/"%s: \1", __FUNCTION__/igc

и просто пройдитесь по ним. Отвечая да / нет по ходу дела.

0 голосов
/ 17 декабря 2009

Вы можете попробовать:

   :%g/M_TRACE.*\");/s/"\(.*\)"/"%s: \1", __FUNCTION__/c

для исключения строк с аргументом после строки.

2-я попытка: Используйте отрицательный шаблон поиска нулевой ширины Vim:

%g/M_TRACE.*\(__FUNCTION__\)\@<!);/s/"\(.*\)"/"%s: \1", __FUNCTION__/

Это M_TRACE, за которым следует ); , которому НЕ предшествует __FUNCTION__

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...