autocmd设置标志打破了语法高亮

时间:2014-11-13 05:55:56

标签: vim

我目前有BufAdd的autocmd,它会在已加载文件的某些行中添加标记(符号)。我已经为每个符号定义了自定义高光,包括:

highlight Custom1 ctermfg=black ctermbg=red
highlight Custom2 ctermfg=black ctermbg=green

sign define custom_sign1 text=>> texthl=Custom1
sign define custom_sign2 text=<< texthl=Custom2

标志是用:

创建的
sign place ID line=LINE name=custom_sign1 file=FILENAME

其中ID是文件中签名的唯一ID,LINE是代码的行号,FILENAME是文件的名称。

所有符号都被正确创建,但它会杀死语法高亮。然后我必须再次syntax on,但是标志的自定义颜色不会显示,此时我必须重新加载定义这些颜色的vimscript。

如何使这不突破语法高亮?

此外,这是通过使用BufAddVimEnter事件的autocmd完成的。

编辑:在帖子末尾写错了BufXXX事件 - 应该是BufAdd

更新

要复制我的问题,请在下面找到.vim文件,然后打开一个通常以语法突出显示的新缓冲区。第一行将有一个红色>>符号,但该文件不会突出显示语法。请注意,它必须是 new 缓冲区(尚未包含在缓冲区列表中):

highlight Custom1 ctermfg=black ctermbg=red
highlight Custom2 ctermfg=black ctermbg=green

sign define custom_sign1 text=>> texthl=Custom1
sign define custom_sign2 text=<< texthl=Custom2

function! SignLine()
    execute "sign place 1 line=1 name=custom_sign1 file=" . expand("<afile>")
endfunction

autocmd!
    autocmd BufAdd * call SignLine()
augroup END

我创建了一个名为test.c的简单文件。在使用上面的.vim脚本作为初始文件打开vim之后,使用:so %)获取它,然后打开test.c,这就是我所看到的:

使用:syntax on重新打开语法后,它现在看起来像这样(自定义标志颜色现在已损坏):

要让自定义标志颜色再次运行,我必须重新提供vimscript AGAIN :so test.vim),之后自定义标志和语法高亮显示工作:

我不应该这样做。为什么会这样?

1 个答案:

答案 0 :(得分:2)

在Vim中打开脚本时,语法高亮显示已经给出了很大的线索:

screenshot

最后一行未正确突出显示,因为没有:augroup命令对应augroup END!您需要像这样定义它(或将两个内部线组合到autocmd! BufAdd ...):

augroup SignLine
    autocmd!
    autocmd BufAdd * call SignLine()
augroup END

初始:autocmd! 删除了所有定义的autocmds ,也是负责加载语法的人。这解释了破碎的行为。