1、自动补全new-omni-completion、OmniCppComplete
new-omni-completion是vim自带的全能补全工具,他要依据ctags生成的tags文件。
按下"Ctrl+X Ctrl+O"会进行自动补全;
默认会有预览窗口,通过在~/.vimrc文件中加入set completeopt=longest,menu
可以关掉智能补全时的预览窗口。
vim自动补全——OmniCppComplete
vim的自动补全功能可通过其插件OmniCppComplete实现。
安装OmniCppComplete
mn@mn-HP:~$ vim-addons install omnicppcomplete
配置OmniCppComplete
在vim配置文件/home/user/.vimrc中加入如下的配置:
View Code
1 "-- omnicppcomplete setting --
2 " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
3 imap <F3> <C-X><C-O>
4 " 按下F2根据头文件内关键字补全
5 imap <F2> <C-X><C-I>
6 set completeopt=menu,menuone " 关掉智能补全时的预览窗口
7 let OmniCpp_MayCompleteDot = 1 " autocomplete with .
8 let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
9 let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
10 let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
11 let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
12 let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
13 let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
14 let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
15 "let OmniCpp_DefaultNamespaces=["std"]
16 let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
17 let OmniCpp_ShowAccess=1
(前几行就是提供了C++中的./->/::等操作符的提示和自动完成)。
OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在 ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。
使用下列命令生成tags文件,就可以 与OmniCppComplete配合运作:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
--c++-kinds=+p : 为C++文件增加函数原型的标签
--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q
# vim自动补全功能的测试
# 为了测试自动补全功能,我们先下载C++一份C++标准库的源代码。
mn@mn-HP:~$ sudo apt-get install build-essential
# 然后在/usr/include/c++下就可以找到标准库的头文件了。
mn@mn-HP:~$ cd /usr/include/c++
mn@mn-HP:/usr/include/c++$ ls
4.6 4.6.3
# 在此文件夹下生成能与OmniCppComplete配合运作的tags文件
mn@mn-HP:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
mn@mn-HP:/usr/include/c++$ ls
4.6 4.6.3 tags
# 在vim的配置文件中如下内容,然后在编程的时候就可以使用自动补全功能了。
mn@mn-HP:/usr/include/c++$ vi ~/.vimrc
- set tags+=/usr/include/c++/tags
# 用vi打开前面的Test.c文件,在printf("Hello World!\n")下一行中,输入pri,然后按下Ctrl+X Ctrl+O,此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中,printf就出现在第6行中
mn@mn-HP:~$ cd ~
mn@mn-HP:~$ vim Test.c
注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有 实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S
帮助文档
:help omnicppcomplete
2、加速你的补全 -- 插件: SuperTab
下载地址 | |
版本 | 1.6 |
安装 | 下载supertab.vba,用vim打开($ vim supertab.vba),然后Source the file (:so %) 此时,supertab.vim 已放入 ~/.vim/plugin 文件夹、supertab.txt已放入~/.vim/doc中了。 |
手册 | supertab.txt |
在你的~/.vimrc文件中加上这两句:
" 0 - 不记录上次的补全方式 let g:SuperTabRetainCompletionType=2
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>, |
3、提示函数原型echofunc
echofunc可以在命令行中提示当前输入函数的原型。
echofunc下载地址:http://www.vim.org/scripts/script.php?script_id=1735下载完成后,把echofunc.vim文件放到 ~/.vim/plugin文件夹中
当
你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明,
则可以通过按键"Alt+-"和"Alt+="向前和向后翻页,
这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持,
并且在创建tags文件的时候要加选项"--fields=+lS"(OmniCppComplete创建的tag文件也能用),
整个创建tags文件的命令如下:
$ ctags -R --fields=+lS
其他插件说明详见echofunc.vim
如果你在编译vim时加上了"+balloon_eval"特性,那么当你把鼠标放在函数名上的时候会有一个tip窗口弹出, 该窗口中也会有函数的声明。
下载地址 | |
版本 | 0.43 |
安装 | 把supertab.vim 文件丢到 ~/.vim/plugin 文件夹就好了 |
手册 | supertab.vim 文件头部, 和命令 ":SuperTabHelp" |
4、markdown语法高亮vim-markdown
下载markdown-1.2.2.vba.gz,用vim打开,运行命令
:source %
此时所有文件将会解压到~/.vim的相应文件,此时安装成功。