2009-10-03 131 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