在 Vimscript 中,是否可以访问语法高亮器已知的信息?
In Vimscript, is it possible to access information known by the syntax highlighter?
例如,如果我正在编写一个 Vim 脚本函数来操作 Python 语法,了解一行是常规代码、注释还是包含在三元组中可能会很有用-引号。我假设 syntax highligher 已经弄清楚了这些事情。我可以在自己的 Vim 函数中轻松访问该信息,还是必须推出自己的解析逻辑?
def eight_the_hard_way():
'''
Blah blah.
'''
# Blort!
x = 4 + 4
return x
我已经搜索了相当多的信息,但到目前为止还没有找到直接关于这个主题的任何内容。
是的,使用synID()
函数,您可以获得特定光标位置的语法ID。
有两个并发症:
- 您通常希望与特定的突出显示组进行比较(例如
Comment
)
- 由于语法嵌套,实际上一个位置可能有一整堆语法。
:help synID()
有额外的提示和指示来解决这些问题。
我的 ingo-library plugin 为此提供了一个方便的 ingo#syntaxitem#IsOnSyntax( pos, syntaxItemPattern )
函数。
此外,请查看 SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor 插件。是不可或缺的调试助手。
例如,如果我正在编写一个 Vim 脚本函数来操作 Python 语法,了解一行是常规代码、注释还是包含在三元组中可能会很有用-引号。我假设 syntax highligher 已经弄清楚了这些事情。我可以在自己的 Vim 函数中轻松访问该信息,还是必须推出自己的解析逻辑?
def eight_the_hard_way():
'''
Blah blah.
'''
# Blort!
x = 4 + 4
return x
我已经搜索了相当多的信息,但到目前为止还没有找到直接关于这个主题的任何内容。
是的,使用synID()
函数,您可以获得特定光标位置的语法ID。
有两个并发症:
- 您通常希望与特定的突出显示组进行比较(例如
Comment
) - 由于语法嵌套,实际上一个位置可能有一整堆语法。
:help synID()
有额外的提示和指示来解决这些问题。
我的 ingo-library plugin 为此提供了一个方便的 ingo#syntaxitem#IsOnSyntax( pos, syntaxItemPattern )
函数。
此外,请查看 SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor 插件。是不可或缺的调试助手。