我已经达到了预期的结果(但想在 SO 上分享)。所以就在这里(以下片段应该组合在一个文件中vars.vim
)。
首先,我定义了一个可以识别 VAR 块的模式:
" pattern that matches VAR-blocks of *.trs files
let varblock = '(VAR\s*\(.*\))'
然后我检查 VAR 块的当前文件(也许有比使用%
它更好的方法?)并忽略未找到匹配项的情况。
" create list of variables from all VAR-blocks
try
silent exe "vimgrep /" . varblock . "/j %"
catch /^Vim\%((\a\+)\)\=:E480/ " no match
" do nothing
endtry
找到的匹配是由getqfilst()
我复制的。然后我用匹配模式的第一个子组替换这个列表中的每个元素varblock
(这将是一个包含空格分隔标识符的字符串)。我将所有此类字符串合并为一个字符串,然后将其拆分为空格以获取标识符列表:
let vars = split(join(map(copy(getqflist()), 'matchlist(v:val.text, varblock)[1]')))
最后,我创建了一个匹配这些标识符的模式并将其注册到trsKeyword
组中:
" activate syntax highlighting for variables
exe "syn match trsKeyword \"\\<\\(" . join(vars, '\|') . "\\)\\>\""
" echo "variables: " . join(vars, ", ")
为了使它与我一起工作,trs.vim
我创建了目录~/.vim/syntax/trs
并将其放在trs.vim
里面vars.vim
。然后在我的~/.vimrc
我添加
" TRS files
au BufNewFile,BufRead,BufWrite *.trs setf trs
它为以结尾的文件激活语法突出显示.trs
(并且在保存缓冲区时更新变量列表)。