2013-02-22 52 views

回答

5

您可以根據當前語法突出顯示腳本來執行此操作。再說了,這個函數返回如果你的光標在一些訪問修飾符(publicprotected等),或一些C++類型(比如,bool等):

function! IsCppAccessOrType() 
    return match(synIDattr(synID(line("."), col("."), 1), "name"), '\v\CcppAccess|cppType') >= 0 
endfunction 

但是,再說一次,這將完全取決於當前語法腳本。上面的例子取決於Vim 7.3提供的標準syntax/cpp.vim


順便說一句,有非常有用的技巧來處理語法高亮顯示的東西:

" Show syntax highlighting groups for word under cursor 
nnoremap <silent> <F10> :call <SID>SynStack()<CR> 
function! <SID>SynStack() 
    if !exists("*synstack") 
     return 
    endif 
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') 
endfunc 

添加到您的vimrc,而當你按下F10,語法項目棧會回聲(詳見:help synstack)。

我發現這個把戲在http://vimbits.com的某處。

+0

非常感謝:) 似乎synID對於所有可識別的關鍵字都返回非零值,我需要檢查的是: 'synID(line(「。」),col(「。」),1 )!= 0' 列不需要-1。 – 2013-02-22 07:26:08

+0

很高興幫助:)而且,你說得對,列'-1'來自自動完成腳本,它需要在那裏處理一個點。我已經從答案中刪除了它,謝謝你的通知。 – 2013-02-22 07:55:29