If you just want to highlight them, search with /buffer and make sure hlsearch is on. Or, for a more permanent solution, navigate to the quickfix window and use :match Search /buffer/
If you care more about filtering, I would do :packadd cfilter, which provides the :Cfilter command. Then a :Cfilter /buffer/ gives you only entries with buffer, and ...
With the match command, you only get 3 match ids:
:match noteHi /\[\cNOTE:[^=]*\]/
:2match todoHi /\[\cTODO:[^=]*\]/
:3match what /ever/
Each time you call these commands for a particular id (1,2,3) you replace whatever was there before. So you can have 3 different ones but that's it, only 3. If you need more, use matchadd().
If by "persisted" you mean only in a current vim session (not stored with text file), then :h textprop API might be what you want.
Here is the proof of the concept:
" check if 'markline' text property exists
" define Markline highlight group to be used for ....
I think what you want is found at :help pattern and searching for line number.
/\%l /\%>l /\%<l
\%23l Matches in a specific line.
\%<23l Matches above a specific line (lower line number).
\%>23l Matches below a specific line (higher line number).
These three can be used to match specific ...
I tried it manually and the last line gave me this error:
E254: Cannot allocate color s:splitcolor
So the guifg value isn't set to anything. (The guibg value is set so that may explain why you noticed some change to the VertSplit appearance.)
The problem is that this command doesn't evaluate the parameter values unlike, for example, the way :echo s:...