我想获取光标下的单词的语法组,或光标下的下一个单词。我目前的代码就是这个:
let l:syntaxgroup = synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")
如果我们考虑这个Python代码:
def foo(self):
^ cursor is here
检测到语法组:Statement
。但是,如果我们将光标放在前面,就像这样:
def foo(self):
^ cursor is here
未检测到语法组。有没有办法在光标下取代当前/下一个单词的位置,而不是使用col(".")
?
编辑:快速说明:我想找到当前/下一个字;在下列情况(C)中,我应该得到double
:
double x = (double)rand() / RAND_MAX;
^ cursor is here
答案 0 :(得分:0)
要匹配单词中的当前位置,或者如果它与当前位置中的单词不匹配,则匹配下一个单词,您可以搜索:
\v(\w|.{-}\zs\w)
因此,您可以使用以下函数来获得您想要的内容:
fun! GetHLName()
" Defines the pattern:
let l:pattern = printf('\v%%%dc(\w|.{-}\zs\w)', col('.'))
" Stores either the column of the cursor, or the column of the next word:
let l:col = match(getline('.'), l:pattern) + 1
" (+1 because match() returns 0-based index)
return synIDattr(synIDtrans(synID(line("."), l:col, 1)), "name")
endf
在以下来源中,%%%dc
替换为%23c
,23
取决于col('.')
:所以它与当前光标列匹配。