Добавяне на търсения с регулярни изрази към списък във Vim

Опитвам се да приложа техниката, предложена от ib в друг отговор на stackoverflow, не мога да го накарам да работи в случай m.

Опитвам се да извлека списък с числа от текст с референтни връзки в този формат

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

След извличане на числата искам да получа максималната стойност от списъка, за да мога да намеря следващото подходящо число, което да използвам.

Беше предложено в отличен отговор тук:

Как да извличате съвпадения на regex с помощта на 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