截止目前,已经成功实现了用YCM来完成对 Python 和 C++ 的自动补全,心情大好,于是跑回来继续完成翻译工作,就当攒人品啦。
——————————————分割线————————————————
—— Translation starts here ——
YouCompleteMe: a code-completion engine for Vim
YouCompleteMe(以下简称YCM) 是一个为VIm设计的快速补全引擎,具有边输入边补全和模糊搜索的功能。YCM拥有多个补全引擎。这其中包括一个基于识别符的、可以为所有编程语言提供补全的引擎(identifier-based engine),一个基于Clang的、可以为C/C++/Objective-C/Objective-C++(以下简称为‘C族语言’(C-family languages))提供原生语义代码补全的引擎(Clang-based engine),一个基于Jedi的、可以为Python补全的引擎(Jedi-based engine),一个基于OnniSharp的、可以为C#补全的引擎(OmniSharp-based engine)和一个基于omnifunc的、可以利用从Vim的omnicomplete 系统中获得的用户数据来为许多语言(比如Ruby,PHP等)提供语义补全的引擎。
首先,我们需要认识到,不需要按任何键盘快捷键就可以看到补全候选列表:用户只要继续输入就好,候选补全建议就会自己出现。如果用户没有从候选的补全建议中找到自己想要找的,或者就是想自己从键盘上打出来的话,补全引擎是不会干预的。
当用户从候选列表中发现了自己想找的,按TAB键来选中,补全就可以完成。如果候选列表中有多个建议选项,继续按TAB键就可以在这些选项中进行选择。
如果候选列表中的选项都不是很符合我们的需要,用户可以继续输入,这样补全引擎就会筛掉那些不相关的候选建议。
这里需要特别指出的是,补全引擎不单单是把用户输入的字符当做前缀来补全。用户的输入其实是被当做一个子序列来实现补全的。换句话说,任何候选列表中和用户输入的字符顺序保持一致的都会被当做候选选项来呈现给用户。比方说,‘abc’是‘xaybgc’的一个子序列,而不是‘xbyxaxxc’的子序列。在根据这个规则进行过筛选之后,一套复杂的排序系统会将所有符合的候选项进行排序,把系统认为最相关的候选项排在最上面来方便用户选择。(所以通常只需要按一次TAB键选出来的就是所需要的)
以上所说的部分适用于所有的编程语言,因为这是基于识别符引擎(identifier-based engine)来完成的。 这个引擎会收集当前文件和其他正在访问的文件中的所有字符串,然后在用户输入的时候从中搜索。
范例演示中还展示了语义补全引擎。当用户在VIm 的插入模式下编写C++时候,如果输入 '.' , '->' 或者 '::' (其他语言可能是其他的触发键),语义补全引擎就会被触发(也是可以被键盘快捷键触发的,参见文档的余下部分)。
在范例演示中,我们还可以看到YCM的诊断显示特性(左侧侧栏中的小红叉是在编写C族语言时由Syntastic引起的)。随着Clang编译并检测你的文件,其中的错误和警告会以各种各样的方式呈现给你。并不需要对你的文件进行保存操作或者按任何的键盘快捷键,它自己就会在后台实现这个功能。
实质上,YCM淘汰了以下几种Vim插件(因为YCM已经涵盖了他们的所有功能,并添加了一些新功能):
· clang_complete
` AutoComplPop
` Supertab
` neocomplcache
YCM 还为C族语言和Python提供了“查看定义/声明”的命令。接下来,YCM会增加更多的具有IDE特性的功能。
你还会发现YCM具有路径补全功能 (试一下在文件中输入 './')。
———————— 先翻译到这里,呼——————————