命令行下的编辑工具 Vim(2)
2010-12-26 18:20
246 查看
vim的配色方案
之前给vim使用了几种网上的几种配色方案, 发现怎么都是黑白屏?
答:syntax on
打开syntax on之后, 配色方案是变成彩色了, 但是显示效果和网上的配置不一样呀?
答: 可能下载的配色方案是gui模式的, 如果你通过终端登录的, 那么配色方案是不适用的. 必须使用终端对应的配色方案才行.
推荐的终端可用的配色方案(dante提供):
http://www.vim.org/scripts/script.php?script_id=2465
还要修改vim的配置:
syntax enable
syntax on
colo wombat256mod
set t_Co=256
也可以参考如下的(未测试)
http://blog.csdn.net/linxxx3/article/details/6372755 http://snapshot.soso.com/snap.cgi?d=8385718277515009282&w=vim+%D6%D5%B6%CB+%C5%E4%C9%AB&u=http://linux.chinaunix.net/bbs/thread-947799-1-1.html tags的使用技巧
直接查看一个tag,跳到其定义处。
:tag snprintf 直接查看snprintf的原型
:tselect tagname 当有多个匹配的时候,查看所有匹配
:tnext 下一个匹配,更多查看帮助
:tags 查看跳转的栈
修改vimrc配置, 使ctrl+]变得智能.
"让CTRL-]只有一个选择时自动跳转,多个选择时,出现选择列表
map <C-]> :tselect <C-R>=expand("<cword>")<CR><CR>
map <C-]> g<C-]>
在刚才跳转过的地方跳转 (除了C-] 和 C-T之外的选择)
C-I C-O
助记 O:old,很久很久以前的跳往的地方
I:来自的地方
为新项目生成tags
set tags+=/home/nemo/code/trunk_20101224/tags
追加tags
:set tags=./tags,./../tags,./*/tags 也可以直接设置多个tags
CTAGS的使用技巧 生成tags时的技巧
当前目录以及子目录的所以文件包好php,cpp,java等全生成tags
ctags -R *
为特定的语言的文件生成tags (这样ctags不会为解析其他语言的文件)
eg --languages=c,c++
查看ctags程序默认的语言对应的扩展名
ctags --list-maps
生成tags,修改特定语言的的扩展名
eg 将.h识别为c语言文件
--langmap=c:+.h
指定生成的tags文件名字
-f ~/.vim/sys_tags
同时搜索多个目录下的文件
ctags [options] /usr/include /usr/local/include
man ctags 会得到 ctags [options] [file(s)], 可见最后面就是文件了,可以是多个文件。并且是可选的,如果没有提供文件,默认就是当前文件夹了。
查看ctags针对不同语言支持的生成tag的语法元素,
比如,对于c++,支持对宏,函数名,类名,结构体名等生成tag
ctags --list-kinds
C++
c classes
d macro definitions
e enumerators (values inside an enumeration)
f function definitions
g enumeration names
l local variables [off]
m class, struct, and union members
n namespaces
p function prototypes [off]
s structure names
t typedefs
u union names
v variable definitions
x external and forward variable declarations [off]
红色部分[off]是默认ctags 不生成tag的语法元素,也就是对于c++语言,默认不生成本地变量,函数原型,前置声明以及extern声明的变量。
如果要生成需指定参数:--<LANG>-kinds
为c++的函数原型也生成tag,对与extern变量以及前置声明变量也生成tag
--c++-kinds=+px
指定其他的一些扩展选项(有一些插件比如echofunc可能依赖此项)
--fields=+iaS :ctags要求描述的信息,其中
i表示如果有继承,则标识出父类;
a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);
S表示如果是函数,则标识函数的signature。
--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags
ctags使用的完整举例:
ctags为系统头文件目录生成tags
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include
其关键是
1)-I __THROW部分和--c-kinds=+p部分。为了不让__THROW干扰ctags,需要在运行ctags时使用-I选项。我一般使用下面的命令生成系统头文件tags
设置-I后,ctags会在处理文件时,就会忽略-I后面写出来的符号。
2)而--c-kinds=+p则告诉ctags需要为函数原型的声明也生成tag。--langmap=c:+.h表示.h视为c文件而不是c++文件。
一个生成ctags的脚本
#! /bin/bash
ctags -I __THROW --file-scope=yes --fields=+iaS --extra=+q --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include
更多ctags参考:
1)ctags为系统头文件目录生成tags
http://hi.baidu.com/%B2%BB%D5%FD%D6%B1%B5%C4%C8%CB/blog/item/7f55080382c5a9e708fa93bf.html
2)man ctags
cscope以及在vim中使用cscope
我的vim版本7.2.330
我的cscope版本:15.7a
如何生成cscope索引数据库
1) 先通过find命令生成源文件名字列表my_cscope.files
(如果有多个目录,可以分别为不同的目录生成源文件列表,然后在合并)
2) cscope -bkq -i my_cscope.files
如何让vim支持cscope,以及设定cscope生成的索引数据库?
网上下载cscope_maps.vim插件,放在.vim/plugin目录下即可。
如果你的vim默认不支持cscope,可能需要重新编译vim使其支持哦。
如何在vim中设置连接cscope的生成的数据库
1)
你需要在vim中连接cscope的索引数据库,使用命令:
:cs add /usr/src/linux/cscope.out
2)默认vim会在工作目录下搜索是否有cscope.out文件存在。
3)您可以检查当前连接的索引数据库,确保设置ok
:cs show
4)您也可以重置索引数据库
:cs reset
cscope的用法举例
1)我想用cscope查看当前光标下的函数的调用信息
ctrl+/ s /是]符号右边的/ 就像ctags的ctrl+]一样 (cscope的快速查询方法)
同时按下ctrl和/, 然后按下s键.
2)通过输入命令查询
查找符号snprintf的出现的地方
:cs find 0 snprintf
更多含义:
0 or s: Find this C symbol
1 or g: Find this definition
0 or s: Find this C symbol
1 or g: Find this definition
2 or d: Find functions called by this function
3 or c: Find functions calling this function
4 or t: Find this text string
6 or e: Find this egrep pattern
7 or f: Find this file
8 or i: Find files #including this file
综合了cscope和ctags的命令
:cstag snprintf
相当于 :cs find g snprintf 或 :tjump snprintf
当cscope查找失败时自动用ctags查找
cscope程序的更多选项的含义
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
如何使用cscope的独立GUI模式
启动:cscope -d
使用:tab在不同的选项间切换
退出:CTRL-D (我因为不知道这个快捷键,搞了好久退不出来)
问题:
为何我的cscope不能查找成员函数,甚至连snprintf, printf都查看不了?
我先生成文件列表,再通过文件列表生成索引数据库,在vim中我也正确的指定了cscope.out索引数据库,
可能的原因
1)我在生成cscope的时候,没有指定 -i参数,导致生成了错误的 cscope。out
如果你的 源文件列表的文件名字不是 cscope.file, 那么需要带上-i参数
2) 在生成cscope.out时是否出现告警?
比如:
nemo@ubuntu:~/.vim$ cscope -b -q -k -i cscope_trunk.file
cscope: cannot find file /home/nemo/code/trunk_20101224/outerlib/apppayclient/api/apppackage.cpp
上面的代码出现告警, 导致我生成的文件总是用不了。郁闷。
如果我的代码更新了,如果让cscope的索引数据库也更新?
重新执行一遍生成cscope的命令.cscope不会像souceinsight那样自动更新执行.
更多帮助:
1)Vim+cscope+ctags+tags阅读源代码
作者:许振文
http://blog.csdn.net/amicablehj/archive/2010/07/10/5725981.aspx
直接把当前光标下的单词送到命令行里面!!
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
这个方法真的非常非常好用,可以扩展到其他插件的使用上,真的非常非常好用!!!!!!!
比如:查找当前光标下的函数的所有tag标签。 这样就省的手动输入tselect 函数名字了。自定义快捷键。牛XX。
153 nmap <C-@>d :tselect <C-R>=expand("<cword>")<CR><CR>
参考易水博客更详细的cscope的配置! http://easwy.com/blog/archives/advanced-vim-skills-cscope/
echofunc 自动提示函数原型
echofunc是这样的一个插件:当你输入函数名字,然后在输入(之后,自动的会在界面最下面提示函数的原型(signature)
安装方法:
1)下载echofunc.vim插件到.vim/plugin/目录下
2)生成echofunc.vim所必须的tags。 要求生成tags时必须加上 --fields=+iS 选项。
否则可能无法显示函数原型。
参考:
http://edyfox.codecarver.org/html/vimplugins.html
code_complete自动提示函数原型,自动输入代码模板
自动提示函数原型
code_complete也可以实现自动提示函数原型,类似于echofunc。当你输入函数名字,然后再输入(之后,然后按tab,自动的会提示函数原型让你选择。
使用方法类似与echofunc,但有所不同。
1)下载code_complete.vim插件到.vim/plugin/目录下
2)生成code_complete.vim所必须的tags。 要求生成tags时必须加上 --fields=+iS ,以及--c-kinds=+p选项。
否则可能无法显示函数原型。
参考:
http://www.vim.org/scripts/script.php?script_id=1764
自动输入代码模版(代码片段)
1)当你直接输入函数名字,(此时不要输入‘(’)就按tab,就会自动的帮你输入代码片段,并且将光标定位在第一个参数处,可以直接修改参数。继续按tab,可以切换到不同的参数。
2)对与if,for,while等标准结果,也支持代码模版
if( `<...>` )
{
`<...>`
}
--------------------------------------------------------------------------------------------------------------------------------
OmniCppComplete插件,自动提示成员函数,成员变量等
----------------------------------------------------------------------------------------------------------------------------------
强烈建议看OmniCppComplete的帮助文档,非常详尽的资料!!Omni支持那些特性,不支持哪些特性,讲的非常的详尽。
使用好omnifunc的关键点
1)生成合适的ctags.否则omni的功能无法使用或无法正常使用.
使用如下的方式可以正常使用omnifunc的功能.
ctags -I __THROW --file-scope=yes --fields=+iaS --extra=+q --languages=c++ --links=yes --c++-kinds=+p --c-kinds=+p -R -f ~/.vim/trun
ktags /home/nemo/code/trunk_20101224
官方推荐的方法是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .
每个参数解释如下:
-R:ctags循环生成子目录的tags
--c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
--fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。
--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags
2)当omnifunc的功能无法正常使用时怎么办?
比如在同样一个文件里面定义了 DevInfo,AppInfo,DBHelper. 对于DevInfo,AppInfo,都可以很好的智能提示,对于DBHelper却不能智能提示成员?
omnifunc的帮助手册上说: 如果无法智能提示,查看是否你的ctags生成的tags有问题, 可以用tselect DBHelper确定下是否可以找到标签.等多信息查看omnifunc的帮助.
3)使用omnifunc的方法
安装omnifunc很简单,查看帮助即可. 一般是解压后生成3个文件夹,放在.vim目录下即可.
当输入AppInfo.的时候,一般会自动提示成员函数或成员变量,如果没有提示 C-X,C-O即可. 如果还没有提示,说明你生成的tags有问题,或没有设置好ctage.使用tselect确认下是否真的是ctags的问题.
--------------------------------------------------------------------------------------------------------------------------------
taglist插件,像IDE一样,在左侧窗口中显示类成员函数,成员变量列表等。
----------------------------------------------------------------------------------------------------------------------------------
按照方法以及注意事项,参考taglist的帮助文档。
:TlistToggle 调出窗口
:TlistClose 关闭窗口
如下设置可以保证当Tlist是最后一个窗口时可以自动关闭
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
http://edyfox.codecarver.org/html/vimplugins.html
设置快捷键打开tlist
noremap <F4> :TlistToggle<CR>
--------------------------------------------------------------------------------------------------------------------------------
winManager插件,想windows的资源管理器一样,浏览文件夹的工具。
----------------------------------------------------------------------------------------------------------------------------------
:WMToggle 调出窗口
// 当wmtoggle是最后一个窗口时,退出
let g:persistentBehaviour=0
:map <c-w><c-t> :WMToggle<cr> 设置按键映射调出该窗口。
重复<c-w><c-t> 关闭窗口
--------------------------------------------------------------------------------------------------------------------------------
NERD Tree插件,想windows的资源管理器一样,浏览文件夹的工具。(比winManager要好用)
----------------------------------------------------------------------------------------------------------------------------------
具有目录树的功能
傻瓜是安装。 把vimcopy到plugin目录即可。
:NERDTree 可以呼出界面。
--------------------------------------------------------------------------------------------------------------------------------
代码注释插件The NERD Commenter
----------------------------------------------------------------------------------------------------------------------------------
简单介绍下NERD Commenter的常用键绑定,以C/C++文件为例,详析的使用方法,请:h NERDCommenter。在Normal或者Visual 模式下:
,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
,cc,注释当前行 ========<常用
,c,切换注释/非注释状态
,cs,以”性感”的方式注释
,cA,在当前行尾添加注释符,并进入Insert模式
,cu,取消注释 ========<常用
Normal模式下,几乎所有命令前面都可以指定行数
Visual模式下执行命令,会对选中的特定区块进行注释/反注释
注意,如上命令支持指定行数的注释与反注释,比如:num,cc 注释num行
[count]<leader>cc |NERDComComment|
[b]Comment out the current line or text selected in visual mode.[/b]
参考
http://www.dutor.net/index.php/2010/05/vim-the-nerd-commenter/
之前给vim使用了几种网上的几种配色方案, 发现怎么都是黑白屏?
答:syntax on
打开syntax on之后, 配色方案是变成彩色了, 但是显示效果和网上的配置不一样呀?
答: 可能下载的配色方案是gui模式的, 如果你通过终端登录的, 那么配色方案是不适用的. 必须使用终端对应的配色方案才行.
推荐的终端可用的配色方案(dante提供):
http://www.vim.org/scripts/script.php?script_id=2465
还要修改vim的配置:
syntax enable
syntax on
colo wombat256mod
set t_Co=256
也可以参考如下的(未测试)
http://blog.csdn.net/linxxx3/article/details/6372755 http://snapshot.soso.com/snap.cgi?d=8385718277515009282&w=vim+%D6%D5%B6%CB+%C5%E4%C9%AB&u=http://linux.chinaunix.net/bbs/thread-947799-1-1.html tags的使用技巧
直接查看一个tag,跳到其定义处。
:tag snprintf 直接查看snprintf的原型
:tselect tagname 当有多个匹配的时候,查看所有匹配
:tnext 下一个匹配,更多查看帮助
:tags 查看跳转的栈
修改vimrc配置, 使ctrl+]变得智能.
"让CTRL-]只有一个选择时自动跳转,多个选择时,出现选择列表
map <C-]> :tselect <C-R>=expand("<cword>")<CR><CR>
map <C-]> g<C-]>
在刚才跳转过的地方跳转 (除了C-] 和 C-T之外的选择)
C-I C-O
助记 O:old,很久很久以前的跳往的地方
I:来自的地方
为新项目生成tags
set tags+=/home/nemo/code/trunk_20101224/tags
追加tags
:set tags=./tags,./../tags,./*/tags 也可以直接设置多个tags
CTAGS的使用技巧 生成tags时的技巧
当前目录以及子目录的所以文件包好php,cpp,java等全生成tags
ctags -R *
为特定的语言的文件生成tags (这样ctags不会为解析其他语言的文件)
eg --languages=c,c++
查看ctags程序默认的语言对应的扩展名
ctags --list-maps
生成tags,修改特定语言的的扩展名
eg 将.h识别为c语言文件
--langmap=c:+.h
指定生成的tags文件名字
-f ~/.vim/sys_tags
同时搜索多个目录下的文件
ctags [options] /usr/include /usr/local/include
man ctags 会得到 ctags [options] [file(s)], 可见最后面就是文件了,可以是多个文件。并且是可选的,如果没有提供文件,默认就是当前文件夹了。
查看ctags针对不同语言支持的生成tag的语法元素,
比如,对于c++,支持对宏,函数名,类名,结构体名等生成tag
ctags --list-kinds
C++
c classes
d macro definitions
e enumerators (values inside an enumeration)
f function definitions
g enumeration names
l local variables [off]
m class, struct, and union members
n namespaces
p function prototypes [off]
s structure names
t typedefs
u union names
v variable definitions
x external and forward variable declarations [off]
红色部分[off]是默认ctags 不生成tag的语法元素,也就是对于c++语言,默认不生成本地变量,函数原型,前置声明以及extern声明的变量。
如果要生成需指定参数:--<LANG>-kinds
为c++的函数原型也生成tag,对与extern变量以及前置声明变量也生成tag
--c++-kinds=+px
指定其他的一些扩展选项(有一些插件比如echofunc可能依赖此项)
--fields=+iaS :ctags要求描述的信息,其中
i表示如果有继承,则标识出父类;
a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);
S表示如果是函数,则标识函数的signature。
--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags
ctags使用的完整举例:
ctags为系统头文件目录生成tags
ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include
其关键是
1)-I __THROW部分和--c-kinds=+p部分。为了不让__THROW干扰ctags,需要在运行ctags时使用-I选项。我一般使用下面的命令生成系统头文件tags
设置-I后,ctags会在处理文件时,就会忽略-I后面写出来的符号。
2)而--c-kinds=+p则告诉ctags需要为函数原型的声明也生成tag。--langmap=c:+.h表示.h视为c文件而不是c++文件。
一个生成ctags的脚本
#! /bin/bash
ctags -I __THROW --file-scope=yes --fields=+iaS --extra=+q --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p -R -f ~/.vim/systags /usr/include /usr/local/include
更多ctags参考:
1)ctags为系统头文件目录生成tags
http://hi.baidu.com/%B2%BB%D5%FD%D6%B1%B5%C4%C8%CB/blog/item/7f55080382c5a9e708fa93bf.html
2)man ctags
cscope以及在vim中使用cscope
我的vim版本7.2.330
我的cscope版本:15.7a
如何生成cscope索引数据库
1) 先通过find命令生成源文件名字列表my_cscope.files
(如果有多个目录,可以分别为不同的目录生成源文件列表,然后在合并)
2) cscope -bkq -i my_cscope.files
如何让vim支持cscope,以及设定cscope生成的索引数据库?
网上下载cscope_maps.vim插件,放在.vim/plugin目录下即可。
如果你的vim默认不支持cscope,可能需要重新编译vim使其支持哦。
如何在vim中设置连接cscope的生成的数据库
1)
你需要在vim中连接cscope的索引数据库,使用命令:
:cs add /usr/src/linux/cscope.out
2)默认vim会在工作目录下搜索是否有cscope.out文件存在。
3)您可以检查当前连接的索引数据库,确保设置ok
:cs show
4)您也可以重置索引数据库
:cs reset
cscope的用法举例
1)我想用cscope查看当前光标下的函数的调用信息
ctrl+/ s /是]符号右边的/ 就像ctags的ctrl+]一样 (cscope的快速查询方法)
同时按下ctrl和/, 然后按下s键.
2)通过输入命令查询
查找符号snprintf的出现的地方
:cs find 0 snprintf
更多含义:
0 or s: Find this C symbol
1 or g: Find this definition
0 or s: Find this C symbol
1 or g: Find this definition
2 or d: Find functions called by this function
3 or c: Find functions calling this function
4 or t: Find this text string
6 or e: Find this egrep pattern
7 or f: Find this file
8 or i: Find files #including this file
综合了cscope和ctags的命令
:cstag snprintf
相当于 :cs find g snprintf 或 :tjump snprintf
当cscope查找失败时自动用ctags查找
cscope程序的更多选项的含义
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
如何使用cscope的独立GUI模式
启动:cscope -d
使用:tab在不同的选项间切换
退出:CTRL-D (我因为不知道这个快捷键,搞了好久退不出来)
问题:
为何我的cscope不能查找成员函数,甚至连snprintf, printf都查看不了?
我先生成文件列表,再通过文件列表生成索引数据库,在vim中我也正确的指定了cscope.out索引数据库,
可能的原因
1)我在生成cscope的时候,没有指定 -i参数,导致生成了错误的 cscope。out
如果你的 源文件列表的文件名字不是 cscope.file, 那么需要带上-i参数
2) 在生成cscope.out时是否出现告警?
比如:
nemo@ubuntu:~/.vim$ cscope -b -q -k -i cscope_trunk.file
cscope: cannot find file /home/nemo/code/trunk_20101224/outerlib/apppayclient/api/apppackage.cpp
上面的代码出现告警, 导致我生成的文件总是用不了。郁闷。
如果我的代码更新了,如果让cscope的索引数据库也更新?
重新执行一遍生成cscope的命令.cscope不会像souceinsight那样自动更新执行.
更多帮助:
1)Vim+cscope+ctags+tags阅读源代码
作者:许振文
http://blog.csdn.net/amicablehj/archive/2010/07/10/5725981.aspx
直接把当前光标下的单词送到命令行里面!!
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
这个方法真的非常非常好用,可以扩展到其他插件的使用上,真的非常非常好用!!!!!!!
比如:查找当前光标下的函数的所有tag标签。 这样就省的手动输入tselect 函数名字了。自定义快捷键。牛XX。
153 nmap <C-@>d :tselect <C-R>=expand("<cword>")<CR><CR>
参考易水博客更详细的cscope的配置! http://easwy.com/blog/archives/advanced-vim-skills-cscope/
echofunc 自动提示函数原型
echofunc是这样的一个插件:当你输入函数名字,然后在输入(之后,自动的会在界面最下面提示函数的原型(signature)
安装方法:
1)下载echofunc.vim插件到.vim/plugin/目录下
2)生成echofunc.vim所必须的tags。 要求生成tags时必须加上 --fields=+iS 选项。
否则可能无法显示函数原型。
参考:
http://edyfox.codecarver.org/html/vimplugins.html
code_complete自动提示函数原型,自动输入代码模板
自动提示函数原型
code_complete也可以实现自动提示函数原型,类似于echofunc。当你输入函数名字,然后再输入(之后,然后按tab,自动的会提示函数原型让你选择。
使用方法类似与echofunc,但有所不同。
1)下载code_complete.vim插件到.vim/plugin/目录下
2)生成code_complete.vim所必须的tags。 要求生成tags时必须加上 --fields=+iS ,以及--c-kinds=+p选项。
否则可能无法显示函数原型。
参考:
http://www.vim.org/scripts/script.php?script_id=1764
自动输入代码模版(代码片段)
1)当你直接输入函数名字,(此时不要输入‘(’)就按tab,就会自动的帮你输入代码片段,并且将光标定位在第一个参数处,可以直接修改参数。继续按tab,可以切换到不同的参数。
2)对与if,for,while等标准结果,也支持代码模版
if( `<...>` )
{
`<...>`
}
--------------------------------------------------------------------------------------------------------------------------------
OmniCppComplete插件,自动提示成员函数,成员变量等
----------------------------------------------------------------------------------------------------------------------------------
强烈建议看OmniCppComplete的帮助文档,非常详尽的资料!!Omni支持那些特性,不支持哪些特性,讲的非常的详尽。
使用好omnifunc的关键点
1)生成合适的ctags.否则omni的功能无法使用或无法正常使用.
使用如下的方式可以正常使用omnifunc的功能.
ctags -I __THROW --file-scope=yes --fields=+iaS --extra=+q --languages=c++ --links=yes --c++-kinds=+p --c-kinds=+p -R -f ~/.vim/trun
ktags /home/nemo/code/trunk_20101224
官方推荐的方法是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .
每个参数解释如下:
-R:ctags循环生成子目录的tags
--c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
--fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。
--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags
2)当omnifunc的功能无法正常使用时怎么办?
比如在同样一个文件里面定义了 DevInfo,AppInfo,DBHelper. 对于DevInfo,AppInfo,都可以很好的智能提示,对于DBHelper却不能智能提示成员?
omnifunc的帮助手册上说: 如果无法智能提示,查看是否你的ctags生成的tags有问题, 可以用tselect DBHelper确定下是否可以找到标签.等多信息查看omnifunc的帮助.
3)使用omnifunc的方法
安装omnifunc很简单,查看帮助即可. 一般是解压后生成3个文件夹,放在.vim目录下即可.
当输入AppInfo.的时候,一般会自动提示成员函数或成员变量,如果没有提示 C-X,C-O即可. 如果还没有提示,说明你生成的tags有问题,或没有设置好ctage.使用tselect确认下是否真的是ctags的问题.
--------------------------------------------------------------------------------------------------------------------------------
taglist插件,像IDE一样,在左侧窗口中显示类成员函数,成员变量列表等。
----------------------------------------------------------------------------------------------------------------------------------
按照方法以及注意事项,参考taglist的帮助文档。
:TlistToggle 调出窗口
:TlistClose 关闭窗口
如下设置可以保证当Tlist是最后一个窗口时可以自动关闭
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
http://edyfox.codecarver.org/html/vimplugins.html
设置快捷键打开tlist
noremap <F4> :TlistToggle<CR>
--------------------------------------------------------------------------------------------------------------------------------
winManager插件,想windows的资源管理器一样,浏览文件夹的工具。
----------------------------------------------------------------------------------------------------------------------------------
:WMToggle 调出窗口
// 当wmtoggle是最后一个窗口时,退出
let g:persistentBehaviour=0
:map <c-w><c-t> :WMToggle<cr> 设置按键映射调出该窗口。
重复<c-w><c-t> 关闭窗口
--------------------------------------------------------------------------------------------------------------------------------
NERD Tree插件,想windows的资源管理器一样,浏览文件夹的工具。(比winManager要好用)
----------------------------------------------------------------------------------------------------------------------------------
具有目录树的功能
傻瓜是安装。 把vimcopy到plugin目录即可。
:NERDTree 可以呼出界面。
--------------------------------------------------------------------------------------------------------------------------------
代码注释插件The NERD Commenter
----------------------------------------------------------------------------------------------------------------------------------
简单介绍下NERD Commenter的常用键绑定,以C/C++文件为例,详析的使用方法,请:h NERDCommenter。在Normal或者Visual 模式下:
,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
,cc,注释当前行 ========<常用
,c,切换注释/非注释状态
,cs,以”性感”的方式注释
,cA,在当前行尾添加注释符,并进入Insert模式
,cu,取消注释 ========<常用
Normal模式下,几乎所有命令前面都可以指定行数
Visual模式下执行命令,会对选中的特定区块进行注释/反注释
注意,如上命令支持指定行数的注释与反注释,比如:num,cc 注释num行
[count]<leader>cc |NERDComComment|
[b]Comment out the current line or text selected in visual mode.[/b]
参考
http://www.dutor.net/index.php/2010/05/vim-the-nerd-commenter/
相关文章推荐
- 命令行下的编辑工具 Vim
- 命令行下的编辑工具 Vim(vim相关)
- 命令行下的编辑工具 Vim
- CentOS系统中安装高亮vim编辑工具的方法
- 文本编辑工具vim
- 文本编辑工具Vim
- 文本编辑工具----vim
- 将vimdiff作为svn di默认的编辑工具
- linux入门教程(九) 文本编辑工具vim
- 便利的开发编辑工具-vim
- 文本编辑工具vim
- Linux下编程工具的使用(6) - VIM编辑器系列(1) - 进行有效编辑的七种习惯(vim)
- ubuntu安装vim编辑工具
- CentOS系统中安装vim编辑工具
- 文本编辑工具Vim及三种模式用法
- 20150830-Y1506401-19+benz2015+文本编辑工具vim的使用方法等
- 将Vim配置成为一款强大的编辑工具之 vimrc配置
- RHCE课程-初级部分6、编辑工具VIM,网络配置,进程优先,日志文件简介。
- 文本编辑工具vim
- RHCE课程-RH033Linux基础笔记六之编辑工具VIM、网络配置、进程优先、日志文件简介