vim的youcompleteme插件问题
archlinux吧
全部回复
仅看楼主
level 8
meijieru369 楼主
现在我的c语言的头文件被识别为cpp,非常不爽,求大神拯救
2015年06月05日 02点06分 1
level 10
set ft=c
set filetype=c
2015年06月05日 03点06分 3
多谢大神回复,但每次都要手动设置?
2015年06月05日 03点06分
回复 meijieru369 :谁让cpp的head文件结尾是h,而不是hpp。再说cpp兼容c,而c不兼容cpp。
2015年06月05日 03点06分
以前都是正常的,装了youcompleteme就这样了,是不是设置的问题呢
2015年06月05日 03点06分
@meijieru369 不清楚,我一直没用过ycm。
2015年06月05日 04点06分
level 10
也可以在vimrc写个判断,搜索当前目录,如果存在和head同名的c文件,就set ft=c
2015年06月05日 03点06分 4
level 10
项目的ycm_extra_conf.py
可以设置c还是c++的
https://github.com/Valloric/ycmd/blob/master/cpp/ycm/.ycm_extra_conf.py#L61
总之c项目和c++项目放置的ycm_extra_conf都是不同的
2015年06月05日 05点06分 5
level 10
搞了半天,应该是楼主记错了。这个和ycm的设置没关系,我今天先安装了ycm,我也一直怀疑是ycm的问题。其实问题是vim自己的filetype问题。
在/usr/share/vim/vim74/filetype.vim中
377 " .h files can be C, Ch C++, ObjC or ObjC++.
378 " Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
379 " detected automatically.
380 au BufNewFile,BufRead *.h call s:FTheader()
381
382 func! s:FTheader()
383 if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
384 if exists("g:c_syntax_for_h")
385 setf objc
386 else
387 setf objcpp
388 endif
389 elseif exists("g:c_syntax_for_h")
390 setf c
391 elseif exists("g:ch_syntax_for_h")
392 setf ch
393 else
394 setf cpp
395 endif
396 endfunc
这一段就是默认认为*.h为cpp,如果要设置为默认是c,设置g:c_syntax_for_h才行。
.vimrc添加let g:c_syntax_for_h=1
2015年06月07日 02点06分 7
level 10
吃了个饭回来,觉得还是我之前那个做法比较好。先检查是否存在*.c的文件,存在则设置为c的类型,否则为cpp。
if filereadable(expand('%:p<'))
let g:c_syntax_for_h=1
endif
2015年06月07日 03点06分 8
多谢大神⊙▽⊙
2015年06月07日 04点06分
@meijieru369 并不是大神。
2015年06月07日 04点06分
回复
�ļ�Ʈ��
:您的ycm正常吗,我的只能补全当前文件的函数及变量,配置文件已经设置了
2015年06月07日 05点06分
@meijieru369 还没配ycm,下午出门了。
2015年06月07日 15点06分
level 3
Archlinux 安装ycm失败ya,老哥求助
2017年10月04日 11点10分 10
1