2010-11-04 42 views
32

在vim中,FIXME和TODO是突出顯示的,但我無法獲得FIXME:和TODO :(注意關鍵字後的冒號)以突出顯示?我應該在我的.vimrc中做什麼才能做到這一點?在vim中,我如何突出顯示TODO:和FIXME:?

+1

這很奇怪;我的突出顯示有沒有冒號。語法突出顯示在單個語法中定義,我認爲 - 這是在某些特定的文件類型中發生的嗎? – Cascabel 2010-11-04 13:50:15

+0

@Jefromi:我認爲它發生在每種文件類型中。 – 2010-11-04 13:51:32

+2

':verbose set iskeyword?'告訴? – Benoit 2010-11-04 13:52:37

回答

46

那麼,你已經發現了這個問題,但這是爲什麼。

語法匹配有三種基本類型:關鍵字,匹配和區域。關鍵字是固定字符串,通常用於基本語言關鍵字(int,double,...),對於您的情況,也適用於FIXME和TODO。我確實是指固定的字符串;他們必須是精確的和完整的單詞,不像使用正則表達式的匹配和區域。例如,從C語法:

syn keyword cTodo contained TODO FIXME XXX 

它看起來像幾乎所有內置的語法定義,只是與不同的組名(cTodo)。

iskeyword告訴vim給定的字符是否可以成爲關鍵字的一部分。默認情況下,它不包含冒號,因此當查找關鍵字時,vim將「FIXME:」視爲「FIXME」,並忽略冒號。如果你釘在冒號(set iskeyword+=:),你現在可以定義突出的一個額外位:

syn keyword myTodo contained TODO: FIXME: 

你想如何把它工作到現有的語法/高亮組這是給你的。如果它僅適用於一種文件類型,則可以將其添加到該語法的待辦事項組(例如cTodo)。如果你想在任何地方,你可以按我的建議做「myTodo」,然後直接鏈接到Todo突出顯示組(hi def link myTodo Todo)。

或者,你可以離開iskeyword單獨(我可能會建議這一點),並簡單地用一根火柴:

syn match myTodo contained "\<\(TODO\|FIXME\):" 
hi def link myTodo Todo 
+0

+1 @Jefromi,但是,我不認爲這個syn匹配有效。我將它放在我的.vimrc中,如果我將FIXME更改爲其他內容,則不會突出顯示。 – g33kz0r 2011-11-17 01:00:50

+2

@ G33kx0r:這不是這場比賽的錯;它仍然有效,如果它仍然存在。我懷疑你在vimrc中的行之後啓用了語法(這種或那種)*,並且啓用語法時,它首先清除舊的語法,然後加載適當的語法。您可以使用':syn list myTodo'來檢查該匹配是否仍然存在。另見':help syntax-loading'。 – Cascabel 2011-11-17 01:33:40

+0

設置第一個'語法on'和之後'syn match myTodo包含「\ <\(TODO \ | FIXME \):」'在我的'vimrc'文件和'嗨! def鏈接myTodo Todo'不適用於我。另一方面,例如,如果我這樣做,'au BufNewFile,BufRead * .tex syn match texTodo「\ <\(TODO \ | FIXME \):''生成的'tex'文件被正確突出顯示。有一個通用的解決方案嗎? – petobens 2013-06-11 18:24:36

1

如果你把自己的環境,make syntax file (not .vimrc)

  • 全球語法文件位於vim目錄(例如 /usr/share/vim/vim72/syntax/c.vim)

  • 如果喲你做〜/ .vim/syntax/c.vim,然後你可以爲你自己的 添加語法。 (覆蓋)

只需在該文件中添加其他語法即可。 (@Jefromi的方式一樣)

8
augroup vimrc_todo 
    au! 
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/ 
      \ containedin=.*Comment,vimCommentTitle 
augroup END 
hi def link MyTodo Todo 

containedin將其添加到「註釋」結尾的所有羣體,再加上 vimCommentTitle,其中" TODO: foo不至於太突出,否則作爲MyTodo。

+0

使用說明:您可以將其添加到.vimrc中,並且如果您只想突出顯示該單詞,而不是後面的冒號,請刪除冒號(':')。我更喜歡突出顯示_NOTE_ :,而不是_注意:_。我有時也會寫NOT NOTE或TODO,後面跟着冒號。 – Ari 2016-09-15 22:08:00