Vim插件YouCompleteMe翻译之UserGuide I.

来源:互联网 发布:小型网络射击游戏 编辑:程序博客网 时间:2024/06/03 03:18

原文如下:

自己在安装使用这个插件的时候遇到了不少曲折,现在这里对用户指导进行翻译,一来让自己能够耐下心来通读一遍,二来方便其他朋友使用。


用户指导 (User Guide)

一般用法 (General Usage):

   ·如果觉得补全功能太广泛的话,只需要继续输入代码即可;YCM会基于你的输入持续修正补全功能。

   ·过滤功能是“smart-case(智能大小写)”敏感的;如果输入的全部是小写字母,就会变成大小写不敏感。如果输入中包含大写字母,那么大写字母必须匹配待补全字符          串中的大写字母(小写字母仍然是会大小写都匹配)。因此"foo"和“Foo”以及"foo"都是匹配的,“Foo”和“Foo”以及“FOO”都是匹配的,但是和“foo”就无法匹配。

   ·使用TAB键来接受补全功能提供的提示选项,继续按TAB键可以在提示选项中循环。按Shift + TAB向后循环。注意如果是使用console Vim(即,不是GVim或者          MacVim)的话,Shift + TAB键很有可能无法启用,因为控制台可能无法将指令传递给Vim。可以重新设置键的映射,请参见下面的参考(Options)部分。

了解一些YCM的内部工作机制也有助于对它的使用。YCM使用的补全引擎有:一个基于标示符的补全器(identifier-based completer)。这个补全器会收集当前文件以及其他被访问文件中的所有标示符,并在用户输入的时候搜素这些标示符。


YCM中还有几个语义引擎。其中有一个libclang-based补全器,这个补全器会对C族语言提供语义补全。有一个Jedi-based补全器,用于对Python提供语义补全。有一个omnifunc-based补全器,这个补全器会使用来自Vim omnicomplete系统的数据来对那些在YCM中没有原生补全器支持的语言进行补全。


还有几个其他的补全器,例如UltiSnips补全器和filepath补全器。


YCM会自动的探测应该使用哪个补全引擎。偶尔,也会同时查询若干个补全引擎,并把输出结果合并后一起呈现出来。


客户服务器架构 (Client-server architecture):

YCM有一个客户服务器架构;YCM的Vim部分只是一个HTTP+JSON服务器的一个小客户,而后者才拥有着YCM的大部分逻辑和功能。这个服务器会在Vim启动和关闭时自动的启动和关闭。

补全字符串排行 (Completion string ranking):

子序列过滤器会去除掉那些和输入不匹配的补全提示,这时排序系统就会启动。这其中的机制非常复杂,并且使用到了很多参数,但是还是有一点需要特别指出:“单词边界”(WB)子序列字符匹配要比非单词边界(non-WB)的匹配要好。实际上,这意味着,给定一个输入"gua",“getUserAccount”会比“Fooguxa”在补全提示中的排序更高(两者都是子序列匹配)。全大写字符,前置有下划线的字符和首字母字符都是单词边界字符。

通用语义补全引擎的使用 (General Semantic Completion Engine Usage):

·即便没有字符串前缀,在任何位置也都可以用 Ctrl + Space 来触发补全提示。这有助于看到可以被使用的函数中的最高级别的那个。

C族语义补全引擎的使用 (C-family Semantic Completion Engine Usage):

YCM会在已打开文件的所在文件夹中查找 .ycm_extra_conf.py 文件,如果没有找到,会在这个文件夹的上级文件夹中递归寻找。当找到的时候,这个文件就会被当做
一个Python的模块被加载。YCM会调用这个模块中的FlagsForFile方法,来实现对当前文件的补全。也可以提供一个全局.ycm_extra_conf.py文件的路径。为了防止错误代码的执行,YCM会在这个文件被安全加载之后对用户进行一次询问。

之所以这个系统会被设计成这个样子,是因为这样就可以让用户执行任意操作序列。

更多细节请参看YCM自己的.ycm_extra_conf.py文件,你可以把这个文件当成一个起点。不要简单的拷贝/复制这个文件,就以为它可以工作了。你的项目会需要不用的flags。提示:用自己的项目中的必要编译flag来替换其中的flag变量,99%的情形下都是奏效的。

是的,Clang的CompilationDatabase系统也是被支持的。同样的,请参看之前的示例文件。

在编译文件所包含的头文件时,如果Clang遇到了错误,通常会花费很长时间来完成补全功能。当补全菜单最终显示的时候,会包含许多不想干的补全字符串(类型/方程 名字都不是成员对象)。这是因为,如果在包含的头文件中有错误的话,Clang就不能为文件建立一个预先编译的前同步码。

调用 :YcmDiags命令来看看在你的文件中是否有错误或者警告。

Python语义补全引擎的使用 (C-family Semantic Completion Engine Usage):

YCM使用Jedi作为对Python的语义补全器。这个补全器应该是不需要用户的任何配置就可以使用的。你不需要自己安装Jedi;YCM默认把它当做一个git子库来使用。如果是用Vundle安装的YCM(这也是我们推荐的方式),那么Vundle会确保在调用 :BundleInstall时子库被检查。如果是手动安装YCM,那么在检查YCM库时需要运行命令 
git submodule update --init --recursive

 

















0 0
原创粉丝点击