vim поиск и замена последовательного вхождения строки на другую строку - PullRequest
0 голосов
/ 19 мая 2018

Допустим, у меня есть несколько STRING случаев.Я хочу заменить 1-е вхождение на STRING_A, 2-е вхождение на STRING_B, 3-е вхождение на STRING_C.

например,

Color of my pant is STRING. Color of my hair is STRING. Color of my car is STRING.

После запуска поиска и замены ядолжен получить:

Color of my pant is STRING_A. Color of my hair is STRING_B. Color of my car is STRING_C.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете определить Список замен, а затем использовать :help sub-replace-expression, чтобы вытеснить замены из него:

:let r = ['bar', 'baz', 'bak']
:%substitute/STRING/\=remove(r, 0)/g
0 голосов
/ 19 мая 2018

С vim wiki :

let @a=1 | %s/STRING/\='STRING_'.(@a+setreg('a',@a+1))/g

Но это даст вам STRING_1, STRING_2 и т. Д.

Небольшая модификация дает желаемый результат:

let @a=65 | %s/STRING/\='STRING_'.nr2char(@a+setreg('a',@a+1))/g

Если вы хотите получить подстановки из массива, сначала определите массив:

:let foo=['bar','baz','bak']

Затем выполните подстановку:

let @a=0 | %s/STRING/\=get(foo, @a+setreg('a',@a+1))/g

Это даст вам:

 Color of my pant is bar. Color of my hair is baz. Color of my car is bak.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...