2009-10-03 94 views
0

我在XYZ中定义的头文件中突出显示了XYZ。但是,在使用它的地方,XYZ不会突出显示。我将如何解决这个问题?突出显示VIM中的#defined值

我重视的两个屏幕截图(见TH_SYN代码)澄清我question-

link text

任何指针欢迎。

回答

3

我已经做了一个非常简单的方法来做这个Java常量(静态决赛),基于这样一个事实,即所有的常量,都带有下划线的大写。几乎没有其他标识符符合该标准。

所以一个非常简单,快速但不是100%准确的方法是将所有大写匹配到您定义的语法组。

编辑。加样

在你的语言的语法文件,只是添加类似:

syn match defined "[A-Z][A-Z0-9_]*" 
HiLink defined Type 

你可以做HiLink到Constant,或任何你喜欢的定义高亮组。

+0

很棒..可以请你告诉我我在.vimrc中做的相同的行吗? 谢谢。 – user183442 2009-10-06 06:12:38

+1

更强大的匹配是'\ v \ w @<!(\ u | _ + [A-Z0-9])[A-Z0-9 _] * \ w @!',它只匹配不同的大写单词不是说,在其他小写字符串中间的大写字母序列)。 – sevko 2014-07-09 03:59:15

0

我认为这是以“#define”开头的事实为基础的第一个亮点。第二个没有任何标记,vim可以用它来决定它需要被突出显示。 Vim不会像Eclipse那样进行深入的语法分析,它只是简单的lexing。

+0

谢谢..我现在更好地了解它如何VIM亮点 – user183442 2009-10-06 06:09:11

0

这听起来像你想基于特定的常量名称自定义突出显示等。你可以通过使用ctags或类似的基于常量生成标签,然后让vim突出显示结果。

欲了解更多信息,ctags + vim上有很多帖子。见,例如

Vim and Ctags tips and tricks Vim auto-generate ctags

和其他很多的。

+0

谢谢你的笔记。我已经尝试过基于荧光笔的ctags,但是由于我的标签文件很大,所以它们会使VIM变慢。我正在寻找一种类似于此处提到的函数名称的脚本 - http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim/773392 – user183442 2009-10-03 06:42:08

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)。

+0

谢谢Al..I '有时候会给这个镜头 – user183442 2009-10-06 06:10:55

+0

真棒男人...我也会尝试一下 – 2010-03-19 02:02:50