使用YouCompleteMe实现VIM中JavaScript的语义补全?

9
有没有办法在VIM中获得语义化的JavaScript代码完成?我尝试使用YouCompleteMe(YCM),它可以给我一些代码完成,但是它完全基于我的当前缓冲区(或缓冲区?)。当我明确调用:YcmCompleter时,我会得到“ValueError:文件类型['javascript']不存在语义完成器”错误信息。我主要在node:sails.js和angularjs中工作。我真的很想在输入时获得库方法建议(例如,对于angular,protractor / mocha / jasmine)。谢谢!

很遗憾,我认为YCM不支持任何类型的JavaScript语义完成引擎。Tern是一个用于JavaScript的语义引擎,并且有一个Vim插件,但我不确定它能否与YCM协同工作。 - voithos
3个回答

4
YCm的README中得知:
如果YCM没有适用于文件类型的本地语义完成引擎,则会使用您的omnifunc(请参见Vim中的:h omnifunc)作为语义完成的源。 Vim带有针对各种语言(如Ruby,PHP等)的不错的omnifunc。这取决于语言。 Tern for Vim通过Vim的本地omni-completion(<C-x><C-o>)提供了您需要的完成功能。安装该插件后,YCM应该能够透明地使用它来进行JavaScript完成。

你说得对,应该这样做。显然在这个方向上正在进行工作[链接](https://github.com/Valloric/YouCompleteMe/pull/724) - danba
1
据我所知,目前没有什么可以做的。在我提交了这个问题(#3)后不久,Omni-completion fallback就被添加了,因此YCM 应该使用通过omnifunc选项注册的任何JavaScript完成函数。话虽如此,即使在作者回复我的问题之前,我也已经彻底删除了YCM,因此我建议您转向YCM的问题跟踪器以获取任何进一步的请求。 - romainl

2

2
目前,YouCompleteMe还没有适用于javascript的语义补全程序。不过,有些人正在处理这个问题。这里是一个即将被合并的请求,用于集成JS Tern。
如果没有语义补全程序,则只能使用通用的补全程序,例如标识符补全程序、文件路径补全程序和片段补全程序。
更新:Tern已经集成到YCM中了。点击查看详情。

但是按下 ctrl + Space 确实会显示一个语义完整性列表。有没有办法根除这个语义自动完成器 YCM 的建议列表呢? - Alexandre Bourlier
1
不,这是 YCM 设计的方式。默认情况下,仅启用标识符自动完成器。当您键入句点“.”时,语义补全器会被触发(因为在 JavaScript 中这是属性运算符)。要获取顶层语义补全,您必须按 Ctrl-Space 显式地请求。 - chtenb
感谢您的解释。 - Alexandre Bourlier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接