Can Vim';s关键字完成是否仅限于相同的文件类型?

Can Vim';s关键字完成是否仅限于相同的文件类型?,vim,Vim,当我只打开相同文件类型的文件时,我发现Vim的关键字补全非常有用。但一旦我开始编辑多个文件类型,它就变得不那么有用了。如果我正在编辑一个Python项目,然后在另一个选项卡中打开我的vimrc,那么Python文件中的关键字完成现在将包括来自我的vimrc的关键字。在不禁用“完成”选项以查找其他缓冲区的情况下,关键字完成是否可以仅对相同文件类型的缓冲区起作用?您使用的是/,对吗 set complete的值确定完成源。默认值包括完成列表中其他缓冲区和窗口的内容 有关选项列表,请参见:帮助“完成”

当我只打开相同文件类型的文件时,我发现Vim的关键字补全非常有用。但一旦我开始编辑多个文件类型,它就变得不那么有用了。如果我正在编辑一个Python项目,然后在另一个选项卡中打开我的vimrc,那么Python文件中的关键字完成现在将包括来自我的vimrc的关键字。在不禁用“完成”选项以查找其他缓冲区的情况下,关键字完成是否可以仅对相同文件类型的缓冲区起作用?

您使用的是
/
,对吗

set complete
的值确定完成源。默认值包括完成列表中其他缓冲区和窗口的内容

有关选项列表,请参见
:帮助“完成”
。这可能会解决您的问题:

:set complete=.,t,i

或者,您可以使用其他完成快捷方式,如
,具体取决于您想要完成的内容。请参见
:帮助完成

好主意。我非常喜欢Vim插入模式完成,并编写了一个库,可以轻松实现自定义完成:


通过对该库的一点增强(我刚刚在1.30版中实现了该库),它允许将候选完成项限制在某些缓冲区内。有了这个,我把你的建议作为第一步来实施了。试试看;我希望它对您有用。

从完成中删除w,b,u与我的要求相反。我使用的是supertab,它默认使用c-p,这是正常的关键字补全。所以我想我想要的是一个用户完成函数,它与关键字完成功能相同,但将其限制为相同文件类型的缓冲区。对不起,我错过了你问题的这一部分。但是你忘了提到你使用的是第三方插件,它在等式中引入了许多变量,降低了正确回答的机会。难道不能设置Supertab,使其满足您的需要吗?那
呢?仅搜索当前文件中的关键字。我希望它能做到这一点——同时在其他打开的文件中查找关键字——但前提是这些文件的文件类型相同。看起来唯一的方法是将vimscript中的逻辑作为completefunc重新实现,并附加一个文件类型条件。