CSV поиск и замена - PullRequest
       10

CSV поиск и замена

2 голосов
/ 09 сентября 2011

Я хочу заменить серию символов конвейера другими значениями. Как бы это сделать с помощью регулярных выражений?

Пример:

This | is | a | sentence
And | this | is | the | second | one

Конечный результат:

This new is new2 a new3 sentence
And new this new2 is new3 the new4 second new5 one

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Если значения подстановки отличаются только числами на концах, используйте команду

:let n=[0] | %s/|/\='new'.map(n,'v:val+1')[0]/g

(см. мой ответ на вопрос " gVim найти / заменить счетчиком "для подробного описания метода.)

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

:let n=[-1] | %s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g

Чтобы выполнить подстановки в каждой строке независимо друг от друга, используйте команду :global, чтобы выполнить одну из вышеуказанных команд по строкам буфера.

:g/^/let n=[0] | s/|/\='new'.map(n,'v:val+1')[0]/g

Аналогично,

:g/^/let n=[-1] | s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g
0 голосов
/ 09 сентября 2011

Определите функцию:

fun CountUp()
  let ret = g:i
  let g:i = g:i + 1
  return ret
endf

Теперь используйте:

:let i = 1 | %s/|/\="new" . CountUp()/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...