глобальное совпадение ()? - PullRequest
       28

глобальное совпадение ()?

3 голосов
/ 04 декабря 2011

Я хотел найти строку, а затем сопоставить несколько слов в этой строке, НО вместо того, чтобы заменить их, я бы предпочел просто сохранить их (добавив в регистр или экспортировав в файл).

Isобратные ссылки (то есть субматч (1) или \ 1) выполнимо в этом отношении, или это только посредством замены?Я понимаю, что могу заменить файл, над которым я работаю, - изменить его, - но я бы предпочел экспортировать его.

Есть ли способ вызвать функцию (чтобы сохранить субматч) в пределах замены, не повреждая файл?Или, предпочтительно, использовать глобальный поиск, чтобы захватить часть строки, а затем передать ее в качестве параметра в вызов функции, которая будет выполнять сохранение по желанию?

Ответы [ 2 ]

3 голосов
/ 04 декабря 2011

Попробуйте

:%s/pattern \(saved portion\)/\=[submatch(0), SaverFunc(submatch(1))][0]/

или

:%s/pattern \(saved portion\)\zs/\=SaverFunc(submatch(1))[-1]

. В последнем случае SaverFunc должен вернуть либо строку, либо число (без явного оператора :return он вернет число 0). Не имеет значения, какая строка или число будет возвращено: string_or_number[-1] всегда расширяется до пустой строки.

1 голос
/ 04 декабря 2011

Возможно, вы ищете :h :global и делаете что-то вроде этого:

:g/pattern/call func_to_get_and_save_text()

Это вызвало бы функцию в каждой строке, соответствующей данному шаблону.

...