youcompleteme github插件为什么不能提示函数

文章数:528
评论数:78
访问量:60964
注册日期:
阅读量:5863
阅读量:12276
阅读量:302481
阅读量:1021415
51CTO推荐博文
转自://killer-plugin-of-vim-youcompleteme/vim中的杀手级插件: YouCompleteMeVim代码补全现状在漫长的Vim发展历史中,代码补全一直是比较被忽视的环节,相比众多IDE,vim本身的代码提示功能包括其众多补全插件显得无比简陋, 这是因为vim的先天不足,它是文本编译器,不能理解程序语意。引用王垠的一段文字:“文本编辑器”这种东西一般都不真正的理解程序语言。很多 Emacs 和 vi 的用户以为用 etags 和 ctags 这样的工具就能让他们“跳转到定义”,然而这些 tags 工具其实只是对程序的“文本”做一些愚蠢的正则表达式匹配。它们根本没有对程序进行 parse,所以其实只是在进行一些“瞎猜”。简单的函数定义它们也许能猜对位置,但是对于有重名的定义,或者局部变量的时候,它们就力不从心了。《编辑器与IDE》或许对于python,PHP等动态语言,因为本身的语言特性和丰富的工具支持,也能做到不错的补全效果,但对于C/C++代码的补全, AutoComplPop, omnicppcomplete, neocomplcache等插件的确都是在“瞎猜”。还有一个原因是没有大牛来做这些功能。在漫长的Vim或emacs历史中,它都是掌握在少数精英程序员手里,扩展它都需要一定的专业知识,我辈普通程序员只是在使用它。而代码补全并不是大牛们的必须,我曾经和一个瑞典的PSE做Pair Programming, 只使用emacs和grep等linux命令,他就可以在整个工程里穿梭自如,常用库的调用了然于心,代码结构清晰,几乎没有语法和拼写错误。估计他看到我花里胡哨的vim, 还用代码提示,心里也是一阵鄙视吧。所以尽管大牛们让emacs可以煮咖啡,vim可以发微博,但是vim和emacs的代码提示一如既往的烂了二三十年。在Apply公司支持的诞生后,事情迎来了转机。clang强大语义分析能力,为C/C++/Object-C源代码级别的分析和转化提供了可能,基于clang的语意补全插件开始在vim和emacs上出现。YouCompleteMe是一个比较新Vim代码补全插件,可以基于clang为C/C++代码提供代码提示。它安装配置简单,Bug 很少。 对C/C++来说youcompleteme现在应该是最好选择,借助clang的强大功能,补全效率和准确性极高,而且可以模糊匹配(见下面的demo)。不管你的C++代码用什么怪异的写法,只要能编译通过,都能补全,即使是C++11的lambda和auto都没有障碍,比codeblock这些根据tag index补全的IDE都要强大。YCM的安装配置YCM需要最新版本Vim(7.3.584)的支持,从代码编译Vim的方法看。 youcompleteme后,需要先编译才能使用。1
cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer
语意补全要正确工作,需要配置好.ycm_extra_conf.py文件,模板在。可以把这个文件放在项目的根目录下,打开项目文件时,YCM会循环向上搜索并加载这个文件,或者在vimrc文件中加入1
let g:ycm_global_ycm_extra_conf = 'your path to .ycm_extra_conf.py'如果.ycm_extra_conf.py中include path等配置没有问题,YCM已经可以工作了。YCM更新很频繁,最近版本已经可以和UltiSnip整合了。更新集成SyntasticYCM很早就支持集成了,上面demo里面,代码前的出现红色叉叉,就是YCM结合Syntastic爆出的语法错误。刚开始用YCM的时候,更看重其代码补全功能,Syntastic没放在心上,结果发现越用越离不开了。当编写C++代码的时候,每次光标悬停2秒钟以上的时候,YCM都会在后台扫描你当前的文件,你刚刚输入的代码有什么编译错误,马上就能显示出来,及时的改掉,不再积累到最后编译的时候。当然这是现代IDE的标配功能,vim中也有插件可以实现,但是有了YCM后,再Syntastic,甚至不用任何配置就实现了这些功能,实在是太方便了。代码跳转YCM支持代码跳转了,又一项对程序开发极有用的功能,现在支持c, cpp, object-c, object-cpp, python代码跳转到声明和实现。特别对c和c++, 这个跳转可不是像基于ctags的那些插件,经常让你在一大堆重名的tag里人肉搜索,十跳九不中。得利于clang的强大功能,YCM的代码跳转几乎没有失手,当然前提是你要设置好.ycm_extra_conf.py,代码被YCM解析时没太多编译错误。主要功能是3个YcmCompleter的subcommands:GoToDeclarationGoToDefinitionGoToDefinitionElseDeclaration在vim配置文件中加上一行就搞定了1
nnoremap &jd :YcmCompleter GoToDefinitionElseDeclaration&Comments多说Disqus650) this.width=650;" src="/images/noavatar_default.png" alt="cc" />Win下编译通过了,现在还没有弄明白怎么配配置文件主要是要设置好头文件的搜索路径,你可以参考下我的配置文件650) this.width=650;" src="/images/noavatar_default.png" alt="cc" />晓得了,lz有试过在c++文件中补全c头文件里的函数没。目前,我这里能补全c++头文件里的了,但是不能补全c头文件里的函数。是不是我少配置了什么?很少需要用到补全C函数,貌似和clang的参数有关,不过编译器的配置不是常人能懂的。最快的方法,问ycm的作者 650) this.width=650;" src="http://img./t35/style/images/common/face/ext/normal/0b/tootha_org.gif" alt="[嘻嘻]" title="[嘻嘻]" class="ds-smiley" /> ,去github上提个issue吧: &Valloric回复的相当快。650) this.width=650;" src="/images/noavatar_default.png" alt="cc" />昨天浏览了下YCM的issue,找到解决方法了。Valloric说c函数不会自动补全,需要手动执行补全命令。默认的快捷键是&C-Space&,中文用户可能需要绑定下快捷键。写在这里,好让其他朋友看到~650) this.width=650;" src="/images/noavatar_default.png" alt="azure" />clang对win的支持不行,如果用了vc的一些语言特性,比如特定的warning之类的,完全搞不定补全printf没有??是不是.ycm_extra_conf.py要修改什么?650) this.width=650;" src="/images/noavatar_default.png" alt="cc" />YCM默认不自动不全C的全局函数(比如printf,scanf),如果需要补全需要手动执行。YCM默认的手动补全的快捷键是&C-Space&,对应的命令是ycm_key_invoke_completion,而&C-Space&在中文环境下默认是切换输入法的快捷键,所以要重新绑定快捷键。不是在.ycm_extra_conf.py做修改,而是在.vimrc里做修改,比如重新绑定为&S-Space&即Shift+空格可以了。650) this.width=650;" src="http://img./t35/style/images/common/face/ext/normal/d0/z2_org.gif" alt="[赞]" title="[赞]" class="ds-smiley" /> &解释的很清楚有什么方法能自动补全全局C,像C++一样补全函数,找了半天没找到650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />你好,请问在vim中如何比较好的实现,我输入{}时,代码能够想ST2一样将}回车,并光标移动到{的下一行?谢谢诶没有用过类似的功能,我有在用autopair,输入{, 会自动补全}, 这时候光标是在两个括号中间的。然后打回车,在开启了autoindent 和smartindent的vim中, vim会把} 移到第三行,光标移到第二行,并做好缩进。如果有什么更好的办法,还望告知。650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />你好,我用了delimitMate 自动补全,这个也可以将光标移到括号中间,根据你的方法,我在.vimrc中设置了set smartindent 和set autoindent ,但是我单击回车时,此时}会在第二行,光标在}上面,为何啊?我又仔细看了一下,回车的时候插入一行应该是autopair的功能,不知道delimitMate是否有类似的功能。autopair的文档有如下描述:g:AutoPairsMapCR
& & & &Default : 1
& & & &Map &CR& to insert a new indented line if cursor in (|), {|} [|], '|', "|"
& & & &execute 'inoremap &buffer& &silent& &CR& &C-R&=AutoPairsReturn()&CR&'你好,好像c-support (c.vim) 这个插件有类似的功能:输入 `{`,赶快敲回车,光标就在下一行缩进位上,且在下下行有一个 `}` 补全。650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />你好,我在使用GoToDefinition时候经常出现:Can't jump to definition. &这是为啥啊?如果不是源文件有太多编译错误,可能是程序结构的问题,并不是所有的函数都可以找到定义,特别是一些库函数,一般最好用GoToDefinitionElseDeclaration,大部分时候跳到声明就足够了650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />你好 在使用YCM时,对于大型的工程,工程里面自己写的函数、接口,在别的cpp里面能补全吗?我的只能补全系统函数,比如能补全string的函数,却不能补全我自己写的类你可以在Vim中执行:YcmDiags,看一下报什么样的错误信息?如果是找不到include file,你就需要在ycm_extra_config.py 中添加路径。650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />我看了看你的ycm_extra_conf.py,需要自己设置flags,但是:1、"-I"跟“-isystem”有啥不同啊?2、‘-I’后面是不是将工程的根路径写上吗?你们貌似不是,而是写到了最后一级啊?1. 我们一般把“-I”用作自己的代码,"-isystem"用作第三代码。这样编译代码的时候,第三方代码编译时的warning,就不会显示出来,只需要专注在自己写的代码。2. 我们的makefile比较复杂,不同部分出自不同的人,写include的风格也有些不同,有人就喜欢在include后加上很长的路径,有人则认为路径配置在makefile中,include的时候只需要文件名就好了。650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />你好,请问你一般将你的ycm_extra_conf.py放置的什么路径下面啊?是:.vim/bundle/YouCompleteMe/cpp/ycm/下面吗?还是自己的工程下面啊?我一般是放在工程目录下面的,因为我的ycm_extra_config.py里面有很多针对工程的相对路径650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />能给我一个开源的工程参考一下吗?谢谢 我现在在学opengl650) this.width=650;" src="/images/noavatar_default.png" alt="hominlinx" />还有一个问题:我现在在使用opengl,在ycm_extra_conf.py里面也加入了相应的flag,但是依然没有补全,不过我如果在写代码时,前面加入“::”,他就会补全,这是为啥啊?谢谢650) this.width=650;" src="/images/noavatar_default.png" alt="冷风一夜" />你好,安装了YCM但是对Python文档不工作,下面显示“找不到补全模式”,感觉好奇怪。理论上YCM补全python不需要设置,可能是安装的问题,作者推荐使用vundle安装,你可以再重装试试。650) this.width=650;" src="/avatar/76ed6e4cbc0b0eb4a2b269?s=50" alt="wych" />补全很傻,写ruby 敲class 补全里居然有php XXYCM 需要tag文件支持嘛?不需要tag,C/C++需要clang支持函数能自动补全参数不?不知道你说自动补全参数指的什么。补全函数时会有参数提示,上面的gif中有演示恩。。看到了,没看仔细,,是我想要的功能650) this.width=650;" src="/images/noavatar_default.png" alt="dreamgoes" />" Installing bundles to /home/melo/.vi| & &m/bundle & & & & & & & & & & & & & & & & & & & & & &. Bundle 'gmarik/vundle' & & & & & & & & & & & & & & & & & & & & & & & Bundle 'Valloric/YouCompleteMe' & & & & & & & & & & &Bundle 'scrooloose/syntastic' & & & & & & & & & & & &
&Bundle 'tpope/vim-fugitive' & & & & &
&Bundle 'Lokaltog/vim-easymotion' & & & & & & & & & & & &Bundle 'rstacruz/sparkup' & & & &
&Bundle 'L9' & & & & & & & & & & & & & &Bundle 'FuzzyFinder' & & & & & & & &
&Bundle 'git:///command &t.git' & & & & & & & & & & & & & &
&Helptags & & &Processing 'Valloric/YouCompleteMe'我安装插件一直是这个状态(处理安装第一个插件不动), 请问楼主这是什么原因?650) this.width=650;" src="/images/noavatar_default.png" alt="Silent_hi" />你好,我想问一下你知道不知道YCM那个黑色配色哪里有,为什么要变量和方法名配色是一起的分不开,还有装了YCM之后,你普通的if for while自动补全怎么做到的,谢谢了。我是VIM菜鸟,正在学习,希望能得到你的回复。我的color scheme 是molokai( for while是用的UltiSnip (650) this.width=650;" src="/images/noavatar_default.png" alt="Silent_hi" />好的收到了,我试试,QQQ。请教 cloudzu,如何用whitelist/blacklist来让ycm不要在每次打开vim时都问问题?看它的doc没怎么看懂,我现在是指定一个ycm_global_ycm_extra_conf的方式来让它不叫唤的。650) this.width=650;" src="/images/noavatar_default.png" alt="nob0dy" />我这里在补全一个函数的时候好像就只补全了函数名,不会出现函数名后面的括号,也无法补全函数的参数啊?开发linux驱动,需要怎么添加?能否解释下 ycm_extra_conf.py含义你好,我的YCM安装完以后,写了main.c,test.c,test.h.3个文件测试.函数test1()申明在test.h中.定义在test.c中,在main中想跳转到函数test1(),但是只能跳到申明处,想跳转到定义处时,提示 RuntimeError: Can't jump to definition.是不是还需要配置什么?您好,我安装ycm后,那个ycmd的服务老是打开失败,下面是给的提示HTTPConnectionPool(host='localhost', port=51092): Max retries exceeded with url: /event_notification (Caused by &class 'socket.error'&: [Errno 111] 拒绝连接) An error occured. This is either a bug in UltiSnips or a bug in a &snippet definition. If you think this is a bug, please report it to & Following is the full stack trace: & Traceback (most recent call last): & & File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet_manager.py", line 48, in wrapper & & & return func(self, *args, **kwds) & & File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet_manager.py", line 123, in expand_or_jump & & &rv = self._try_expand() & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet_manager.py", line 457, in _try_expand & & &snippets = self._snips(before, False) & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet_manager.py", line 397, in _snips & & &for snippet in source.get_snippets(filetypes, before, possible): & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/_base.py", line 36, in get_snippets & & &self._ensure_loaded(ft, set()) & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/_base.py", line 54, in _ensure_loaded & & &if self._needs_update(ft): & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/_base.py", line 63, in _needs_update & & &existing_files = self._get_all_snippet_files_for(ft) & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/ultisnips.py", line 149, in _get_all_snippet_files_for & & &return set(base_snippet_files_for(ft)) & &File "/home/sunqiang/.vim/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/ultisnips.py", line 48, in base_snippet_files_for & & &"You have 'snippets' in UltiSnipsSnippetDirectories. This " &RuntimeError: You have 'snippets' in UltiSnipsSnippetDirectories. This directory is reserved for snipMate snippets. Use another directory for UltiSnips snippets.
了这篇文章
类别:┆阅读(0)┆评论(0)YouCompleteMe – 神器在手,代码无忧! | yycmmc
7,800 views
一、 (YCM) 简介
在整个VIM的发展史中,代码补全一直是补忽略的细节,但却又是开发中不可或缺的一项功能。编辑器与集成开发环境的其中区别就在于多文件之间的浏览和自动补全。长久以来,VIM就定位一实用的编辑工具,而非IDE,这就造成了VIM的先天不足。
“文本编辑器”这种东西一般都不真正的理解程序语言。很多 Emacs 和 vi 的用户以为用 etags 和 ctags 这样的工具就能让他们“跳转到定义”,然而这些 tags 工具其实只是对程序的“文本”做一些愚蠢的正则表达式匹配。它们根本没有对程序进行 parse,所以其实只是在进行一些“瞎猜”。简单的函数定义它们也许能猜对位置,但是对于有重名的定义,或者局部变量的时候,它们就力不从心了。
—-以上摘自
VIM中类似的补全插件目前有 AutoComplPop, omnicppcomplete, neocomplcache等,但这些插件在仍停留在“瞎猜”级别,并非语义级的补全。在Apple支持的LLVM/clang诞生后,事情迎来了转机。clang拥有强大语义分析能力,为C/C++/Object-C源代码级别的分析和转化提供了可能,基于clang的语意补全插件开始在VIM和emacs上出现。YCM整合实现了多种同类插件的功能,借助于clang工具生成语法树来完成补全,补全精确、速度快、准确性极高而且可以模糊匹配,不管你的C++代码用什么怪异的写法,只要能编译通过,都能补全,即使是C++11的lambda和auto都没有障碍,比codeblock这些根据tag index补全的IDE都要强大。YCM使用方便,不需要特殊的按键,在输入时自动匹配并弹出匹配窗口,使你能够在整个工程里穿梭自如 ^_^ 。
Auto-triggers as you type.
自动触发,键入即提示,无需快捷键(对C函数的补全需要快捷键)
Uses subsequence-based completion filtering.(模糊匹配)
Uses smart heuristics to intelligently rank whatever candidates survive the filtering step.(词频调整的策略)
Offers semantic completions.(语法层面的补全)
Fast, fast, fast!(号称比clang那个插件更快)
Go to Definition(Function,varible)(跳转到函数、变量的定义处)
二、补全效果
YCM需要最新版本Vim(7.3.584+)的支持,可以选择从代码编译,也可以选择从软件包管理工具中下载。
2. MacOS X
3. Windows
Windows上配置YCM稍显麻烦,不过可以直接下载编译好的,如果不用这个版本的插件而用官方最新版的会匹配不上,功能用不了。
1).下载 VIM 7.4
2) 下载安装VIM插件
3).下载并安装
确保将python.exe加入环境变量
下载完成后放到vim的插件目录或者vundle目录下
解压后提取里面的 libclang.dll 文件,放到YouCompleteMe目录下的python文件夹中(和ycm_core.pyd文件一起)。
注意:一定要确保平台版本的一致性。
完成上述步骤后,就可以测试一下啦,输入命令
如果没有提示错误,那就说明插件安装好了。如果提示如下错误
Runtime Error!
Program: \gvim.exe
An application has made an attempt to load the C runtime
library incorrectly.
Please contact the application’s support team for more
information.
则需要仔细检查PATH环境变量中的每个路径,如果该路径所在目录下有msvcr90.dll,那么就把这个路径从path环境变量中移除,参见
到此,windows下的YCM插件基本安装完成,可以简单的测试下。如果要匹配STL及Platform SDK,则扔需要进一步配置 以下文件:
5)配置_vimrc
& YouCompleteMe 功能
& 补全功能在注释中同样有效
let g:ycm_complete_in_comments=1
& 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=0
& 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files=1
& 引入 C++ 标准库tags,这个没有也没关系,只要.ycm_extra_conf.py文件中指定了正确的标准库路径
set tags+=/data/misc/software/misc./vim/stdcpp.tags
& YCM 集成 OmniCppComplete 补全引擎,设置其快捷键
inoremap &leader&; &C-x&&C-o&
& 补全内容不以分割子窗口形式出现,只显示补全列表
set completeopt-=preview
& 从第一个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=1
& 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
& 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=1
& 修改对C函数的补全快捷键,默认是CTRL + space,修改为ALT + ;
let g:ycm_key_invoke_completion = '&M-;&'
& 设置转到定义处的快捷键为ALT + G,这个功能非常赞
nmap &M-g& :YcmCompleter GoToDefinitionElseDeclaration &C-R&=expand(&&cword&&)&CR&&CR&
6)配置.ycm_extra_conf.py
YCM对C/C++能提供基于语法的自动补全功能,依靠的是clang的语法解析。按照其官方文档的说明,我们还需要配置一个.ycm_extra_conf.py文件,该文件即可以在vimrc文件中指定,也可以放置在代码工程的根目录。
这个文件其实是一个python脚本,这个文件是每个人的设置都不一样的,当然绝大多数情况(官方上写的是99%)只需要修改 flags 数组中的编译相关参数。里面最重要的参数就是‘-I’和‘-isystem’下面指定的头文件所在目录。libclang.dll基于语法检查、自动补全/提示的时候就会到这些目录下去找头文件中的函数定义。
以下是官方的一份模板:
import ycm_core
'-std=c++11',
'-stdlib=libc++',
'-Wno-deprecated-declarations',
'-Wno-disabled-macro-expansion',
'-Wno-float-equal',
'-Wno-c++98-compat',
'-Wno-c++98-compat-pedantic',
'-Wno-global-constructors',
'-Wno-exit-time-destructors',
'-Wno-missing-prototypes',
'-Wno-padded',
'-isystem',
'D:/android-ndk-r9c/platforms/android-19/arch-arm/usr/include/sys',
'-isystem',
'D:/android-ndk-r9c/platforms/android-19/arch-arm/usr/include',
'-isystem',
'D:/android-ndk-r9c/sources/cxx-stl/llvm-libc++/libcxx/include',
'D:/work/jni/inc',
'D:/work/jni/common',
compilation_database_folder = ''
if compilation_database_folder:
database = pilationDatabase( compilation_database_folder )
database = None
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
def DirectoryOfThisScript():
return os.path.dirname( os.path.abspath( __file__ ) )
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
if not working_directory:
return list( flags )
new_flags = []
make_next_absolute = False
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
for flag in flags:
new_flag = flag
if make_next_absolute:
make_next_absolute = False
if not flag.startswith( '/' ):
new_flag = os.path.join( working_directory, flag )
for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
if flag.startswith( path_flag ):
path = flag[ len( path_flag ): ]
new_flag = path_flag + os.path.join( working_directory, path )
if new_flag:
new_flags.append( new_flag )
return new_flags
def IsHeaderFile( filename ):
extension = os.path.splitext( filename )[ 1 ]
return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
def GetCompilationInfoForFile( filename ):
if IsHeaderFile( filename ):
basename = os.path.splitext( filename )[ 0 ]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists( replacement_file ):
compilation_info = database.GetCompilationInfoForFile(
replacement_file )
if piler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile( filename )
def FlagsForFile( filename, **kwargs ):
if database:
compilation_info = GetCompilationInfoForFile( filename )
if not compilation_info:
return None
final_flags = MakeRelativePathsInFlagsAbsolute(
piler_flags_,
piler_working_dir_ )
relative_to = DirectoryOfThisScript()
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
'flags': final_flags,
'do_cache': True
您可能也喜欢:
import ycm_core
'-std=c++11',
'-stdlib=libc++',
'-Wno-deprecated-declarations',
'-Wno-disabled-ma...回复:vim智能补全插件YouCompleteMe新手完全攻略_linux吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:144,190贴子:
回复:vim智能补全插件YouCompleteMe新手完全攻略收藏
请问下ycm如何使用tags补全啊 我用了他原本的config.py文件并删除了try 放在一个简单的test.cpp根目录下但是没有cpp的stl库函数和c++头文件例如 string mystring mystring.无法补全而且我的syntastic一直对ultisnip生成的main函数报错int main(int argc,char *argv[])ERROR:unused parameter argc and argv
@sunperD关于第一个问题,首先,YCM只会对当前scope内的函数/变量补全,也就是说,在打string这句之前,你至少要有:#include &string&另外一个,请确定你的YCM配置文件导入正确,使用命令:YcmDebugInfo,你将看到:注意Flags ... loaded from ...,确定你导入的是正确的配置文件另外检查下面的Flags是不是正确
无聊的时候就要多动动脑子!
附图一张,Preview窗口超好用的好不好,为毛有人会觉得丑而不用它呢。。
mark一下   --       来自小尾巴
非常感谢 问题已解决 我的办法是 在config.py 中加入了 ‘-isystem’,'/usr/include',就出现了补全 现在删除了这两行依旧还有补全了 不知到之前是什么问题syntastic对ultisnips的 main函数警告能消除么?我按照你的方法的确可以转变为warning 是否有方法可以解决这个问题呢 main()改为 main(int *,char **)就不会报错是否只能修该ultisnips的模板 有如何修改main函数模板呢?
楼主GoToDefinitionElseDeclaration跳转过去以后,有什么办法跳转回去么..之前用clang-complete 也是沿袭的c-] c-t进行代码跳转..改用ycm后不能用了,看代码有点别扭
BUG修复提示:如果你有跑goagent或者sougou等本地代理且将它们设置进了变量http_proxy和https_proxy。请用:BundleUpdate升级你的YCM。最新版本将不会路由本地代理。
马克   --来自助手版贴吧客户端
好久没看到吧里有人聊编辑器了,支持下
—— 挽尊于日
星期四 22时41分47秒657毫秒—— 来自于Windows 8.1系统 & Chromium 26.0.1410.64 内核
Valloric这家伙不爱打release tag。然后compile commands的功能就 broken since GOD knows when。今天 bundle update 了之后,database的功能又正常了(赶紧fork过来自己打个tag)。于是使用CMake自动刷新json数据库的功能重新开始着手。近期主要希望完成和Qt库的协作。大概工作是建立一个vim函数,可以手动或由BufWrite之类的条件触发,函数的功能就是调用cmake预编译头文件,并将json所在文件夹路径写入ycm_conf。粗略地考虑了下,可能需要考虑几个细节。一是ui文件并不在add_target的默认依赖里,想要单独编译头文件,可能要用到add_custom_target;二是要保持补全功能的独立性,应该要将补全额外用到的cmake命令和原本的构建脚本有效的分离开。最好的情况是,即使没有一个有效的构建脚本,cmake的json创建过程也能顺利完成(貌似难度有点大)。一旦这个功能完成了,ycm_conf文件就算彻底对用户透明了(但是多出一个cmake依赖项)。
我已经安装好了youcompleteme,但是在使用他的跳转的时候出了问题,比如我的生命实在.h,但是我的实现是在.cpp,可是我在写代码的时候都是include.h的,于是我在使用它的goto definition会出错,也就是他只能跳转到.h,但是不能跳转到.cpp,除非我在include的时候就include .cpp才行,所以问下用过的大神们,这个是我配置的有问题还是他程序的一个bug?希望楼主告知,谢谢了
能不能设置自动补全C,每次都需要按ctrl space ,
最近发现ycm打开c,cpp文件的时候,似乎比以前慢很多.以前基本都是秒开,估计是从llvm升到3.4的时候开始的吧.电脑是32位的,看了下cmake文件,里边好像针对32位系统还是沿用的3.3的包.楼主有遇到这种情况么?
YFVMJDUY可连脚裤森林法就阿放重艳骥调莤跖柍?
这篇是罕见的详细教程啊!MAX 赞!
忹桞秐褾臈僟譩广蹩堓衧欳鄾諲攊没快捷键福建师附阿飞就犜悹踧裄鬡鶮耀娙綐褠缵莺矫敒铀醡竳偍痎叇你那维吉我亲戚尴鑞粅缙镮?
1:泥泞路上的奔驰,永远跑不过高速路上的夏利。说明:”平台很重要!”2:男人,再优秀,没女人也生不下孩子。说明:”合作很重要!”3:我们都知道恶虎架不住群狼。说明:”团队很重要!”4:你拥有再大再多的水桶,也不如有一个水龙头。说明:”渠道很重要!5:每天只签到不留言的,升级永远没有见贴就留言的快。说明:”复制粘贴很重要
楼主把vim配置给传一份到github上吧,新手实在无力
20年前的ps游戏全新复刻驾临pc端
只能收藏,以后再看了!
我配置了下,遇到了些问题1.#include&vector&vector&int&a;a.__可以提示2.#define AAAA 2cout&&AA不能提示请指教
@huyicool35 要 .vimrc,好吧但我只能说,我的配置不适合99%的人,而且我经常会把实验性的代码直接写在上面,然后搞得乱七八糟的另外,今天给一位邮件提问的同学回复了一封邮件,现在发到这里来,算是结帖了。```在此之前有不少人问我他们遇到的各种问题的解决方案。我在屡次和他们交流的时候发现,我99%的时候不过是在重复YCM手册上的内容。而他们99%并没有完整看过YCM的手册(很短),导致他们的整体认识不够,这样再下一次出现问题的时候,他们还是倾向于求助于我而不是手册。显然这不是解决问题的好办法。通过这篇文章我能感觉到的是,您大概很少在 stackoverflow 上提问吧。为了节省提问回答双方的时间,一般的建议是把遇到的具体问题的相关具体信息(运行环境、现象、是否可重现、重现条件、debug信息、log)尽量全面地给出,这样回答者就最有效率地为您解决问题,而不是浪费时间在询问额外信息上。我的个人建议,首先,请至少浏览一遍YCM的手册,您或许能找到您的问题的解决方法或线索。看完手册后,您应该已经知道如何找到YCM的debug信息和其他相关信息了,我建议您:1. 在 stackoverflow 上先搜索是否有相关的问题存在2. 如果还没有回答解决了您的问题,我建议您尝试亲自在上面提问。(在提问之前的文字信息是对于如何为提问者问题提供尽量详尽信息的一个非常全面的概括,请务必仔细读完)stackoverflow 原则上只解决 specific 的问题,如果你还是没有搞清楚自己具体要问的问题是什么。我建议你接下来加入 YCM user 的 Google Group,在上面和其他人发帖讨论,这比只把问题提给某个个人要有效的多。```另外,我已经不上贴吧了。这排版直接让人感累不爱啊有木有!所以大部分人的回复我都看不到了。希望我上面的信息对各位有用吧。今后也不再回复了。
必须收藏了!@我的为知笔记
你好,我之前用YCM挺好的,但是重装系统(ubuntu14.04)之后,安装cmake3.1之后,进行./install.sh --clang-completer这段命令时报错了,内容如下:-- Detecting CXX compiler ABI info-- Detecting CXX compiler ABI info - done-- Detecting CXX compile features-- Detecting CXX compile features - doneYour C++ compiler supports C++11, compiling in that mode.CMake Error at /usr/local/share/cmake-3.1/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
(Required is at least version &2.6&)Call Stack (most recent call first):
/usr/local/share/cmake-3.1/Modules/FindPackageHandleStandardArgs.cmake:374 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.1/Modules/FindPythonLibs.cmake:205 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
BoostParts/CMakeLists.txt:30 (find_package)-- Configuring incomplete, errors occurred!See also &/tmp/ycm_build.ca3Pef/CMakeFiles/CMakeOutput.log&.请问怎么弄的,我是小白,希望能给出详细步骤,另外我看我的vim也支持python的,在此谢谢了
可以补全标准库里的函数吗。vec.push_back()
Vimer路过,顶一个
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 ubuntu youcompleteme 的文章

 

随机推荐