我目前有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。
如何使这不突破语法高亮?
此外,这是通过使用BufAdd
和VimEnter
事件的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
),之后自定义标志和语法高亮显示工作:
我不应该这样做。为什么会这样?
答案 0 :(得分:2)
在Vim中打开脚本时,语法高亮显示已经给出了很大的线索:
最后一行未正确突出显示,因为没有:augroup
命令对应augroup END
!您需要像这样定义它(或将两个内部线组合到autocmd! BufAdd ...
):
augroup SignLine
autocmd!
autocmd BufAdd * call SignLine()
augroup END
初始:autocmd!
删除了所有定义的autocmds ,也是负责加载语法的人。这解释了破碎的行为。