获取当前行中下一个单词的索引

时间:2016-04-11 14:20:28

标签: vim

我想获取光标下的单词的语法组,或光标下的下一个单词。我目前的代码就是这个:

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

1 个答案:

答案 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替换为%23c23取决于col('.'):所以它与当前光标列匹配。