【发布时间】:2014-11-13 19:42:29
【问题描述】:
我目前有一个用于BufAdd 的自动命令,它将在加载文件的某些行中添加标记(符号)。我为每个标志定义了自定义亮点,大致如下:
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 事件的自动命令完成的。
编辑:在帖子末尾写错了 BufXXX 事件 - 应该是 BufAdd
更新:
要重复我的问题,请获取下面的 .vim 文件,然后打开一个通常以语法高亮显示的新缓冲区。第一行会有一个红色的>> 符号,但文件不会突出显示语法。注意它必须是一个新的缓冲区(不在缓冲区列表中):
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),之后自定义标志和语法突出显示都可以工作:
我不应该这样做。为什么会这样?
【问题讨论】:
标签: vim