В VIM, если я делаю :echo split('abcd123ef4ghij56k', '\d\+')
, выводится представление списка [abcd', 'ef', 'ghij', 'k']
.Но я ищу поведение, которое печатает то, что split () не вернуло, в этом случае: ['123', '4', '56']
.
Конечно, в простом примере, как здесь, я мог бы изменить шаблон на \D\+
чтобы получить то, что я хочу.Тем не менее, это не то, что мне нужно, потому что шаблон является аргументом в функции, и я думаю, что не знаю, как противопоставить шаблон.
Вот функция, которая возвращаетсписок для выражения:
function! MatchMultiplePatterns(txt, re)
let l:result = []
let l:pos = match(a:txt, a:re)
while l:pos != -1
let l:matchedString = matchstr(a:txt, a:re, l:pos)
let l:result += [l:matchedString]
let l:pos = match(a:txt, a:re, l:pos + strlen(l:matchedString))
endwhile
return l:result
endfunction
Но я считаю, что это должно быть возможно без while
-loop и вызова match () дважды.