我在头文件中突出显示了XYZ,我在其中定义了XYZ。但是,在使用它的位置,XYZ不会突出显示。我该如何解决这个问题?
我附上两个屏幕截图(请参阅代码中的TH_SYN)以澄清我的问题 -
欢迎提出任何指示。
答案 0 :(得分:4)
没有内置的方法可以在不使用标签荧光笔的情况下突出显示定义。如果您只想突出显示定义的名称(而不是使用完整标签突出显示器的相对较慢的响应),您可以修改标签突出显示器以仅突出显示已定义的名称。
如果您使用我的tag highlighter,您可以修改mktypes.py(除非您使用Windows可执行版本,在这种情况下,请通过网站上的地址给我发送电子邮件,我会为您编译)通过改变这个:
UsedTypes = [
'ctags_c', 'ctags_d', 'ctags_e', 'ctags_f',
'ctags_g', 'ctags_k', 'ctags_m', 'ctags_p',
'ctags_s', 'ctags_t', 'ctags_u', 'ctags_v'
]
到此:
UsedTypes = ['ctags_d']
这将生成一个类型突出显示文件,该文件仅包含已定义的名称,因此应该更快地运行。如果您的项目中有太多已定义的名称,那么它仍然会使Vim慢一点。
要仅突出显示当前文件中定义的已定义名称,请在读取文件后添加调用Vim函数的autocmd。该功能应该是这样的:
function! HighlightDefinedNames()
" Clear any existing defined names
syn clear DefinedName
" Run through the whole file
for l in getline('1','$')
" Look for #define
if l =~ '^\s*#\s*define\s\+'
" Find the name part of the #define
let name = substitute(l, '^\s*#\s*define\s\+\(\k\+\).*$', '\1', '')
" Highlight it as DefinedName
exe 'syn keyword DefinedName ' . name
endif
endfor
endfunction
您需要确保在colourscheme中突出显示DefinedName,例如
hi DefinedName guifg=#ee82ee
(假设您正在使用GUI)。
答案 1 :(得分:3)
我已经为Java常量(静态终结)做了一个非常粗略的方法,基于所有常量都是带有下划线的事实。几乎没有其他标识符符合该标准。
因此,将所有大写字母与您定义的语法组匹配,非常简单,非常快,但不是100%准确。
编辑。添加样本
在您的语言语法文件中添加如下内容:
syn match defined "[A-Z][A-Z0-9_]*"
HiLink defined Type
您可以对Constant
或您喜欢的任何已定义的突出显示组执行HiLink。
答案 2 :(得分:0)
我认为这是以第一个为亮点,因为它以“#define”开头。第二个没有任何标记,vim可以用它来决定是否需要突出显示。 Vim没有像Eclipse那样做深度语法分析,它只是简单的lexing。
答案 3 :(得分:0)
听起来你想要根据特定的常量名称等进行自定义突出显示。你可以使用ctags
或类似的方法根据你的常量生成标签,然后让vim突出显示结果。
有关更多信息,ctags + vim上有很多帖子。例如,参见
Vim and Ctags tips and tricks Vim auto-generate ctags
还有很多其他人。