2012-09-13 3 views
3

Я пытаюсь применить технику, предлагаемую ib, в другом ответе на stackoverflow, не может заставить ее работать в m случае.Добавление поиска регулярных выражений в список Vim

Я пытаюсь извлечь список номеров из текста с эталонными ссылками в этом формате

[1]:www.example.com  
[2]:www.example.2.com 

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

Было предложено в отличном ответ здесь:

How to extract regex matches using Vim

другому лицу, что следующий формат может работать:

:let nextreflink=[] | %s/\d\zs/\=add(nextreflink,submatch(1))[1:0]/g 

Однако при вызове "echo new", в моем случае, список пуст.

Любые идеи были бы очень желанными!

ответ

0

Следующее явно соответствует «[N]» в начале строки, поэтому оно немного более строгое. Это похоже на ответ выше, но он не удаляет числа из ссылок (я не совсем уверен, что с ним происходит).

let refs=[] | %s/^\[\zs\d\+\ze\]/\=add(refs, submatch(0))[-1]/g 

Это оставляет список ссылок в такт. Затем вы можете получить следующую доступную ссылку:

let next = max(refs) + 1 

Это не учитывает пропущенные номера. Если ссылки были [1, 2, 5], то next будет 6.

+0

Это, кажется, работает отлично, хотелось бы, чтобы я спросил раньше! – Simon

1

Вам необходимо записать число, соответствующее \d, путем его включения в \(...\); submatch(1) относится к первому захвату. Кроме того, вы, вероятно, хотите сопоставить несколько номеров \d\+ для поддержки более девяти ссылок.

:let nextreflink=[] | %s/\(\d\+\)\zs/\=add(nextreflink,submatch(1))[1:0]/g 
+0

Большое спасибо. – Simon

Смежные вопросы