• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

VIM新时代的VimC++自动补全插件clang_complete

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、安装 c++ 的 man 文档(此不是VIM插件)

http://gcc.gnu.org/mirrors.html  的其中一个镜像站中,下载最新的 libstdc++/doxygen/libstdc++-man-xxxxxx.tar.bz2
然后放到Linux目录下,把里面的 man3 文件夹中的文件全部解压到 /usr/share/man/man3 目录下。
这样就可以使用:man std::string 这样的命令去查看帮助了。
 
2、配置文件位置:
/etc/vimrc 文件是整个系统的VIM配置文件,用户配置文件是 $HOME/.vimrc (可以在$HOME目录下,执行 ls -a 来查看,默认没有,可以创建一个)。
 
3、插件存放位置:
系统位置在vim安装目录,一般是 /usr/share/vim/vim70/ ,用户的位于 $HOME/.vim/ (如果不存在,可新建该目录即可),一般插件都放于后面那个目录里才能起作用。(比如 omnicppcomplete )
 
4、VIM配置文件
"设置编码
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set fileencodings=utf-8,latin1
endif


"去掉vi一致性
set nocompatible    "set nocp

"配色方案选择,所有配色方案文件在 /usr/share/vim/vim70/colors 目录下
"colorscheme default
colorscheme desert

"让backspace回退键可用
set backspace=indent,eol,start

"语法高亮显示
syntax on
"syntax enable

"把当前行的对齐格式应用到下一行
set autoindent

"开启智能缩进,比如使用左大括号后回车会缩进
set smartindent

"自动缩进长度,包括<< 与 >> 命令移动的长度
set shiftwidth=4    "se sw=4

"TAB长度
set tabstop=4

"显示行号
set nu

"显示匹配,即输入一个右括号时,光标会迅速匹配一下左括号
"set showmatch

"在编辑过程中,在右下角显示光标位置的状态行
set ruler

"修改一个文件后,自动进行备份,备份的文件名为原文件名加“~“后缀
"set nobackup
"set backup

"解决复制后格式乱的问题,但该命令不建议写到配置文件里,因为它会取消自动缩进
"可以在粘贴时先 :set paste  粘贴完之后 :set nopaste
"set paste

"设置手动折叠
"set foldmethod=manual

"打开文件类型自动检测功能
filetype on

"设置vim记录的历史数,即输入:命令,按上方向键保存的命令数
set history=10

"搜索时忽略大小写
set ignorecase

"设置一键编译
map <F6> :make<CR>

"开启高亮显示查找结果
set hlsearch

"搜索到文件两端时不重新搜索
set nowrapscan

"突出显示当前行,即在当前行下面加下划线
"set cursorline

"命令行的高度,默认为1
set cmdheight=1

"为特定的文件类型允许插件文件的载入,
"如OmniCppComplete等插件,就必须开启此功能
filetype plugin on 

"设置 tags 的路径
set tags+=tags
set tags+=/usr/share/vim/vim70/tags/libc.tags
set tags+=/usr/share/vim/vim70/tags/susv2.tags
set tags+=/usr/share/vim/vim70/tags/glib.tags
set tags+=/usr/share/vim/vim70/tags/cpp.tags

"OmniCppComplete 插件设置
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot = 1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

 

如果用VIM打开文件有中文乱码,可以在配置文件中加上如下:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

 

 

5、OmniCppComplete补全插件

很多年没更新了,最新版本是2007年的,下载地址是 http://www.vim.org/scripts/script.php?script_id=1520 ,不过仍然还是很好用的。

下载之后,放到 $HOME/.vim/目录下解压即可。然后在VIM配置文件里进行配置,配置见第4条。

该插件是利用 tags 来补全的,所以要先生成 tags 文件,并在配置文件里添加该文件路径。

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

 

http://www.cnblogs.com/Jiajun/p/3307979.html

下载地址:http://www.vim.org/scripts/script.php?script_id=3302

下载后将执行下面的语句即可完成安装:

vim clang_complete.vmb -c 'so %' -c 'q'

或者直接把下载的 clang_complete.vmb 复制到家目录下.vim/plugin 下

这时候编写一般的C++代码应该有智能提示了 ,不过对于C++11相关的代码却没有,比如智能指针,这时编辑 /etc/vimrc 文件,加上:

let g:clang_complete_copen=1
let g:clang_periodic_quickfix=1
let g:clang_snippets=1
let g:clang_close_preview=1
let g:clang_use_library=1
let g:clang_user_options='-std=c++11 -Imyinclude'

老实说,前面我都不知道什么意思,最后一句作用很大,引入c++11,和自己指定的头文件目录(如果出现找不到的话)

参考:http://www.cnblogs.com/egmkang/archive/2011/02/20/clang_complete.html

  • 使用 Ctrl + N 强制打开补全列表
  • 分别使用 Ctrl + N 和 Ctrl + P 来下翻和上翻
  •  

二、配置VIM语法文件:

VIM语法文件一般位于(如vim72):/usr/share/vim/vim72/syntax/  文件夹下,如 c.vim、cpp.vim 等,也可以在家目录下新建  ~/.vim/syntax/c.vim 等。

1、添加自定义关键字,如自定义的类:

" User Defined DataType
syn keyword cType User Room Game user_ptr

2、添加函数

 

3、添加操作符

 

 

 

"========================================================
" Highlight All Function
"========================================================
syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>[^()]*)("me=e-2
syn match cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>/s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
"========================================================
" Highlight All Math Operator
"========================================================
"C math operators
syn match cMathOperator display "[-+/*/%=]"
" C pointer operators
syn match cPointerOperator display "->/|/."
" C logical operators - boolean results
syn match cLogicalOperator display "[!<>]=/="
syn match cLogicalOperator display "=="
" C bit operators
syn match cBinaryOperator display "/(&/||/|/^/|<</|>>/)=/="
"syn match cBinaryOperator display "/~"
"syn match cBinaryOperatorError display "/~="
" More C logical operators - highlight in preference to binary
syn match cLogicalOperator display "&&/|||"
syn match cLogicalOperatorError display "/(&&/|||/)="
" Math Operator
hi cMathOperator guifg=#3EFFE2
hi cPointerOperator guifg=#3EFFE2
hi cLogicalOperator guifg=#3EFFE2
hi cBinaryOperator guifg=#3EFFE2
hi cBinaryOperatorError guifg=#3EFFE2
hi cLogicalOperator guifg=#3EFFE2
hi cLogicalOperatorError guifg=#3EFFE2


"========================================================
" My Own DataType
"========================================================
syn keyword cType User Room Game

 

在 cpp.vim 中如下设置颜色:  

hi cPointerOperator guifg=#3EFFE2 ctermfg=132

其中,guifg 表示GUI的前景色,ctermfg表示彩色终端前景色。(相应的还有guibg,ctermbg,还有设置属性的如 gui  和 cterm ,其值可以为 bold,underline 。

export TERM=xterm-256color 设置终端使用256色.

从 http://www.vim.org/scripts/script.php?script_id=3412 下载 xterm-color-table.vim.tar.gz 然后解压后,把 plugin/xterm-color-table.vim 放到 vim 的插件目录,然后在VIM里执行 :XtermColorTable 即可显示下面图片:

 

光标在一个单词上,按 gd ,会高亮显示此文件中所有此单词,并跳到定义处;按 * 键会跳到下一个;按 # 键会跳到上一个。

 

http://blog.csdn.net/fbfsber008/article/details/7055842

 

 

 

ctags:

http://ctags.sourceforge.net/

Ctrl + ] 跳转到定义处,Ctrl + T 回到上一个跳转处。

ctags --exclude=include/boost -R --c++-kinds=+px --fields=+iaS --extra=+q .
注意:--exclude=include/boost   一定要在 -R * 之前

每个参数解释如下:

-R:ctags循环生成子目录的tags

--c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明

--fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。

--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。

 

参考:http://www.vimer.cn/2009/10/%E5%9C%A8vim%E4%B8%AD%E4%BD%BF%E7%94%A8ctags.html

http://www.vimer.cn/

 

 

VIM同时编辑多个文件:

http://blog.sina.com.cn/s/blog_6c9d65a10100nj76.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#实现WebSocket协议客户端和服务器websocketsharp组件实例解析发布时间:2022-07-13
下一篇:
TIC6000优化进阶:循环最重要!发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap