In my syntax file I have something like

syn match cleanReal "[+-~]\?\<\d\+\.\d+\(E[+-~]\?\d+\)\?" display
hi def link cleanReal Float

Is there a way to get all strings that are matched as cleanReal from vimscript?

I'm asking because I would like to write a custom command completion function that completes all strings matched by some syntax group.


The last time I've tried something similar, it was to emulate ]s long before it existed. I proceeded by going from word to word until I find one with the right synId*() value.

You could do that, but I'm afraid that it'll be very slow.

If your syntax group it just a regex that you know, and with no context or whatever (like exclusion within comments or strings), may be the easier approach would be to get all matches from getline(1,'$')

let text = join(getline(1,'$'), "\n")
let matches = []
call substitute(text, yourregex, '\=add(res, submatch(0))', 'g')
let matches = uniq(sort(matches))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.