我想定义一些只有在注释和字符串之外输入时才会扩展的映射。检测光标是否位于注释/字符串内的推荐方法是(例如,参见:help synID()
):
if synIDattr(synID(line("."), col("."), 1), "name") == "xxxComment"
但是,这在插入模式下效果不佳。如果光标位于该行的最后一个字符后面,就像在此示例中一样(|
代表光标):
some useful text # Comment text|
函数synID()
始终返回零。这是1)Vim bug,2)语法文件错误,还是3)只是一种语法高亮的方式?
是的,我总是可以检查前一个字符的同义ID,如synID(y, x-1, 1)
中所示,但这会使脚本逻辑的其余部分变得更复杂。
答案 0 :(得分:1)
我投票支持3),它是语法高亮显示如何工作的工件:它只考虑属于缓冲区的字符,当前光标位置(在一行的末尾)是尚未成为缓冲区的一部分。
我以与你在我的某个插件中建议的方式相同的方式解决了这个问题,请参阅here。