Vim 自动完成以包含单词之间的标点符号

Vim 自动完成以包含单词之间的标点符号

我目前正在使用 Tcl/Tk 进行编程。我有一些小部件.entry,stdin.entry,stdout我正在使用超级选项卡用于自动完成。逗号在那里是因为我正在使用一个名为网格加这就是我访问标准 Tk 小部件功能的方式。

使用自动完成功能的想法是,当我键入.entry,并按 Tab 键时,它将仅显示stdin可能stdout的答案。但是,当我这样做时,它会显示文件中所有可能的单词,而不仅仅是stdinand stdout。当我尝试时自动完成弹出新复杂缓存之后它甚至不会弹出菜单.entry,

我猜 Vim 将 the 解释,为单词分隔符,即使没有空格。当我尝试交换,它时_,它起作用了,因为我认为 Vim 将其解释为一个单词。我想这更多地与 Vim 对单词的解释有关,而不是插件问题。但是,我想知道是否可以改变这种行为?

答案1

更改iskeyword选项以控制 Vim 如何决定单词是什么。对于你的情况,你可以添加一个逗号来告诉 Vim 你的单词也由逗号组成:

:set iskeyword+=,

它并不完美地满足您的需求,但我认为它比默认的更好。

:help iskeyword当你在做的时候检查一下。

答案2

我想这更多地与 vim 对单词的解释有关,而不是插件的问题。

事实并非如此,因为编写插件的人大概知道他们在做什么,并且这种行为是有意的而不是偶然的。不幸的是,在这种情况下这对你没有好处。

内置完成(参见:help E535无所不包在维基中),也不会更好——我注意到它实际上使用逗号作为字典中事物的分隔符,所以如果你添加“this,what”,它将包括“this”和“what”的完成”,但不是“这个,什么”。 [但是,请参阅 Holygeek 的答案以获取解决方案]。

你想要的并不是不可能的——omn​​icppcomplete 插件将为 C++ 的“.”、“->”和“::”完成补全,那么为什么不为“,”完成补全呢?问题是很可能没有人单独写过这些行的任何内容......

相关内容