如何在vim中突出显示过去动态指定的列?

时间:2014-08-16 04:36:02

标签: vim

我想在我的.vimrc中创建一个函数来突出显示过去#的所有列,其中#在每个文件类型的autocmd中指定。

例如,如果我希望Python文件突出显示过去的第80列,但是希望能够通过第100列重写Java文件,我希望能够这样做:

autocmd FileType python :call HighlightPastCol(80)
autocmd FileType java :call HighlightPastCol(100)

我正在尝试编写HighlightPastCol(col)函数,如下所示:

function HighlightPastCol(col)
    let pastColRegex = '\v\%>' . a:col . 'v.\+'
    match ErrorMsg pastColRegex
endfunction

其中pastColRegex的格式为'\%>#v.+'#是传入函数的列。我从a related stackoverflow question, but with a static column number得到了这个正则表达式,而不是我想要的动态列规范。这个正则表达式一直在为我工作,但是我不想为每个我希望具有此行为但具有不同列数的文件类型保留手工制作正则表达式。

我遇到的问题是vimscript会抛出错误:

match ErrorMsg pastColRegex

声明'无效参数:pastColRegex'。

如果有更好的方法来执行此操作或使用此功能的插件,我将不胜感激,但我仍然想知道为什么这种方法失败。

1 个答案:

答案 0 :(得分:1)

您需要添加分隔符并动态执行match。我认为这是正确的:

function HighlightPastCol(col)
    let pastColRegex = '/\v\%>' . a:col . 'v.\+/'
    exec 'match ErrorMsg ' . pastColRegex
endfunction

还有colorcolumn选项,它的行为方式不完全相同,但非常方便。