vim代码补全终极配置

标签: vim 代码 终极 | 发表时间:2011-04-15 13:05 | 作者:qiang.xu baocheng
出处:http://www.cnblogs.com/

1. 先来看看效果图

2. 配置方法 

<1>.效果图

下面的效果如如果没有特殊说明,均是不需要按代码提示的快捷键(例如ctrl+p等)的,看看效果,是不是很想visual assist。

1.1  结构struct和枚举enum代码提示:

 

1.2  用户定义函数代码提示

 

1.3  用户定义变量代码提示

 

1.4  c++ class method代码提示:

 

1.5 class属性代码提示

 

1.6 c library代码提示

 

<2>.配置方法

2.1 安装ctags并生成tag文件

安装ctags 

xuqiang@ubuntu:~/Documents/vim/test$ sudo apt-get install ctags

为linux下的c头文件生成tag文件,如果想要为其他的库生成tag文件,原理同下:

xuqiang@ubuntu:~/Documents/vim/test$ sudo ctags -f c --recurse --verbose
其中-f制定tag文件的名字,--recurse表明递归生成当前目录下的所有文件和文件夹。--verbose表明在控制台中打印当前生成进度信息。最好将生成的tag文件保存到一个特定的目录中,这里我是存放在了.vim下:
xuqiang@ubuntu:~/.vim$ ls
after     c-support  exUtility-4.2.0  plugin           tags
autoload  doc        ftplugin         README.csupport

2.2 下载插件

下载插件(红色为本节配置使用到的插件),并存放在~/.vim/plugin/下。

|-- c.vim
|-- neocomplcache.vim
|-- snippet.vim
|-- supertab.vim
|-- taglist.vim

2.3 .vimrc配置文件

 " prérequis tags 

set nocp 
filetype plugin on 
" configure tags - add additional tags here or comment out not-used ones 
" load user definition tags 
" set tags+=~/.vim/tags/stl 
set tags+=~/.vim/tags/c
" linux header file tag
" set tags+=~/.vim/tags/linuxkernel
" set tags+=~/.vim/tags/sdl 
" set tags+=~/.vim/tags/qt4 
" build tags of your own project with CTRL+F12 
map <C-F11> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 
noremap <F11> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> 
inoremap <F11> <Esc>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> 
" OmniCppComplete 
" let OmniCpp_NamespaceSearch = 1 
" let OmniCpp_GlobalScopeSearch = 1 
" let OmniCpp_ShowAccess = 1 
" let OmniCpp_MayCompleteDot = 1 
" let OmniCpp_MayCompleteArrow = 1 
" let OmniCpp_MayCompleteScope = 1 
" let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] 
" automatically open and close the popup menu / preview window 
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif 
set completeopt=menuone,menu,longest,preview
let g:SuperTabRetainCompletionType = 2
let g:SuperTabDefaultCompletionType = "<C-X><C-O>" 
let g:AutoComplPop_MappingDriven = 0
let g:acp_enableAtStartup = 1
let g:acp_ignorecaseOption = 1
let g:acp_completeOption = '.,w,b,k'
" """""""""""""""""""""""""""""configuration for neocomplcache""""""""""""""""""""""""""""
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1 
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 1
" set the max list in the popup menu. increase the speed
let g:neocomplcache_max_list=20
" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
let g:neocomplcache_auto_completion_start_length=1
" ignore letter case
let g:neocomplcache_enable_ignore_case=1
" """""""""""""""""""""""""""""configuration for neocomplcache""""""""""""""""""""""""""""
" """"""""""""""""""""""""""auto complete () "" """"""""""""""""""""""""""""""""""""""""
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
" """"""""""""""""""""""""""auto complete () "" """"""""""""""""""""""""""""""""""""""""
" """"""""""""""""""""""""""""line number"""""""""""""""""""""""""""""""""""""""""""""'
set nu
" """"""""""""""""""""""""""""line number"""""""""""""""""""""""""""""""""""""""""""""
" """""""""""""""""""""""""""""auto indent """"""""""""""""""""""""""""""""""""""""
set autoindent
set cindent
" """""""""""""""""""""""""""""auto indent """"""""""""""""""""""""""""""""""""""""
" """""""""""""""""""""""""""""syntax on"""""""""""""""""""""""""""""""""""""""""""""
syntax on
" """""""""""""""""""""""""""""""syntax on """"""""""""""""""""""""""""""""""""""""""""

需要注意的是,默认的情况下vim是不会加载 set tags+=~/.vim/tags/c文件的,需要使用命令:NeoComplCacheCachingTags

 

 暂时仅仅能够完成的一个文件的代码提示,下面几篇中还将介绍如何使用vim来管理项目文件,如何使用vim来debug c程序。

作者: qiang.xu 发表于 2011-04-15 13:05 原文链接

评论: 14 查看评论 发表评论


最新新闻:
· 华为高管称仍将继续在美国进行收购(2011-04-15 22:55)
· Twitter创始人斯通自嘲早应遭到负面报道(2011-04-15 22:42)
· 这次的科技泡沫不一样(连载1)(2011-04-15 22:39)
· Myspace音乐首席技术官沙皮罗宣布辞职(2011-04-15 22:35)
· MeeGo受手机厂商青睐阵营不断扩大(2011-04-15 22:33)

编辑推荐:Jscex项目现状:UglifyJS解析器及AOT编译器

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [vim 代码 终极] 推荐:

vim代码补全终极配置

- baocheng - 博客园-首页原创精华区
下面的效果如如果没有特殊说明,均是不需要按代码提示的快捷键(例如ctrl+p等)的,看看效果,是不是很想visual assist. 1.1  结构struct和枚举enum代码提示:. 1.2  用户定义函数代码提示. 1.3  用户定义变量代码提示. 1.4  c++ class method代码提示:.

更好的用vim浏览Javascript代码

- cRabdanceR - Kejun&#39;s Blog
vim默认没有一般IDE的outline视图,浏览长篇Javascript源文件很麻烦,taglist插件正是弥补这点不足. 它可以将所有方法和变量分级罗列出来,一目了然. taglist是依赖强大的ctags实现的. ctags支持41种编程语言,其中包括Javascript,但对Javascript支持较随意.

Vim下的代码自动补全和代码跳转阅读

- Frankenstein - IT技术博客大学习
    Linux之所以今天仍然只被少数人使用,不能像windows一样进入寻常百姓家,其配置之难之烦,还是很让人不爽. 号称Linux编辑器哼哈二将之一的Vim也是难逃此列. 虽然很多高手用的得心应手,但是作为初学者往往不知道如何下手.     我希望把同为初学者的我的配置经历,以尽量简洁的语言叙述,试图使这个过程看上去不再那么恐怖.

gocode——VIM 和 Emacs 的 golang 代码自动补全

- XiaoHui - Some reminiscences, some memories
虽然 golang 自身提供了 VIM 的语法高亮之类的脚本,但 autocompletion 并没有官方解决方案. 无意之中发现 gocode 这个支持 VIM 和 Emacs 的 autocompletion daemon. 这里有个Flash 动画演示,展示了 gocode 的强大. 我得说,用过之后,感觉速度确实够快.

给vim添加自动代码长度检测逻辑

- Hitsmaxft - WindStorm
每一种编程语言都有自己的代码规范,这里面少不了的就有代码长度. 比如一般c或者python就是80,而java就是100. 很多朋友都喜欢在vim下写代码,也就习惯了设置不同长度的wrap来处理这个问题. 这里介绍两个另类但是也很常用的方法. 一种是在vim里面自动在80/100的地方画一条红色竖线,提醒你,一旦你越线,就超过代码长度了.

Vim初探(一)

- Lee - 博客园-首页原创精华区
  Vim是一款简单而强大的文本编辑器,它能以简单的方式完成复杂的操作. Vim(http://www.vim.org/)是一款开源软件,提供Windows, Linux和MacOS上的多平台的版本. MacOS上的Vim称为MacVim(http://code.google.com/p/macvim/).

Vim 秘籍表

- fandunqiu - LinuxTOY
献给程序员们,彩色风格的 VIM 速查秘籍表,适合打印、设为桌面背景或放置到专门的数码相框. 同时还提供 300DPI 的清晰版、黑白和适用于红绿色盲人士的版本,请移步至作者站点下载. 消息来源:CoolShell 作者 陈皓. 分类: Screenshots, Vim plugins |. 收藏到 del.icio.us |.

Vim学习笔记

- 临池学书 - C++博客-首页原创精华区
最近在学习Vimtutor中的相关内容,Vim的使用博大精深,很多命令一旦不使用就会忘记,下面把其中的没有使用到的相关命令做一个简单的总结,供以后复习使用. 至于常见的保存,插入等等命令,则不予记录,在以后的使用中加深练习即可. To change until the end of a word, type  ce (ce + 修正的单词).

VIM中替换技巧

- lostsnow - Web Digest
: use :rewind to recommence search " multiple file search better but cheating :bufdo %s/searchstr/&/gic : say n and then a to stop " How to search for a URL without backslashing ?http://www.vim.org/.

简明 Vim 练级攻略

- Andy - 酷壳 - CoolShell.cn
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的. 下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令.