Добавление поиска регулярных выражений в список в Vim

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

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

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

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

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

Как извлечь совпадения регулярных выражений с помощью Vim

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

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

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

Любые идеи будут очень приветствоваться!


person Simon    schedule 13.09.2012    source источник


Ответы (2)


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

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

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

let next = max(refs) + 1

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

person Randy Morris    schedule 13.09.2012

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

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