Vim脚本:检查当前单词是否为/isn';t a C/C++;关键词

Vim脚本:检查当前单词是否为/isn';t a C/C++;关键词,vim,vim-plugin,Vim,Vim Plugin,我正在开发一个小的vim插件,它应该在光标空闲后突出显示当前出现的单词。 我有一个突出显示部分,我需要的是检查当前单词是否不是C/C++关键字。您可以根据当前语法突出显示脚本执行此操作。如果游标在某个访问修饰符(代码>公共代码/代码>,代码>保护>代码>等),或者某些C++类型(例如,代码> Boo.等):< /P> 但是,这将完全取决于当前的语法脚本。上述示例取决于vim 7.3提供的标准语法/cpp.vim 顺便说一句,有一个非常有用的技巧来处理语法突出显示的内容: " Show synt

我正在开发一个小的vim插件,它应该在光标空闲后突出显示当前出现的单词。
我有一个突出显示部分,我需要的是检查当前单词是否不是C/C++关键字。

您可以根据当前语法突出显示脚本执行此操作。如果游标在某个访问修饰符(代码>公共代码/代码>,代码>保护>代码>等),或者某些C++类型(例如,代码> Boo.<代码>等):< /P> 但是,这将完全取决于当前的语法脚本。上述示例取决于vim 7.3提供的标准
语法/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
“显示光标下单词的语法突出显示组
nnoremap:调用SynStack()
函数!SynStack()
如果!存在(“*synstack”)
返回
恩迪夫
回波图(synstack(line('.')、col('.')、synIDattr(v:val,“name”))
endfunc
将其添加到您的
vimrc
,当您按下F10时,语法项堆栈将被回响(有关更多详细信息,请参阅
:help synstack


我在某个地方发现了这个窍门。

非常感谢:)似乎synID对所有可识别的关键字都返回非零,我只需要检查:
synID(第(“.”行,第(“.”)列,第1列)!=0
列不需要-1。很高兴提供帮助:)是的,你是对的,
-1
列来自自动完成脚本,需要它来处理点。我已经从答案中删除了它,谢谢你的提醒。当SynStack函数返回空括号时,
[]
?我在Python中得到了变量的值。
" 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