打造类似visual studio,eclipse功能强大的vim

工作环境:ubuntu9.10,vim7.2

 

1、安装ctags-5.8.tar.gz.

依次安装ctags、taglist。

2、解压并安装ctags

tar zxvf ctags-5.8.tar.gz

cd ctags-5.8

./configure && make && make install

3、解压并安装taglist 

# unzip -d taglist taglist_42.zip

# cd taglist

安装

cp doc/taglist.txt  /usr/local/share/vim/vim72/doc/

cp plugin/taglist.vim  /usr/local/share/vim/vim72/plugin/

配置和使用

cd /usr/local/share/vim/vim72/doc/

启动vim,用 ":helptags ."来配置好帮助文档

重启vim,用":TlistToggle"来打开和关闭taglist窗口。

能够用":help taglist"来获得更多帮助信息。 

注意:如果没有机器的root权限,那么可以安装在 ~/.vim/plugin 下面。tagslist.vim 主要配置一下ctags的路径。

4、使用方法

在源代码根目录输入:ctags -R。给源代码创建tag索引

打开cpp文件输入变量再按Ctrl+P就可以有自动补全的功能了。

$ vim /home/fuhao/vim72/src/main.c

再在vim中运行命令:

:set tags=/home/fuhao/vim72/tags 添加tags。若经常在此目录工作,则此句添加到vimrc中

 

CTRl+w窗口之间跳转

光标放在函数处,ctrl+ ]跳转到定义函数处,ctrl+t回到调用处

新增帮助文档。命令 :helptags .

自动补齐 ctrl+ p

注意:增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:

$ ctags -R

使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>

使用taglist方法:

首先请先在你的~/.vimrc文件中添加下面两句:

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow=1

此时用vim打开一个c源文件试试:

$ vim ~/vim/src/main.c

进入vim后用下面的命令打开taglist窗口  :Tlist

小技巧:

TagList最基本也是最常用的操作. 再教你一个常用的操作, 你在浏览TagList窗口时, 如果还不想让源码跳转, 但是想看看tag在源码中完整的表达, 可以将光标移到你想要看的tag上, 如图中上边黄色的方框, 然后按下空格键, 在下面的命令栏中, 如图下边黄色的方框, 会显示该tag在源码中完整的写法, 而不会跳转到源码处.

帮助: :help taglist.txt

 

5.文件浏览器和窗口管理器 -- 插件: WinManager

简介:是一个文件浏览器, 里面列出了当前目录中的文件, 可以通过这个浏览器来浏览工程中的源文件, 是不是越来越像常见的IDE了, 当光标停在某个文件或文件夹的时候, 按下回车, 可以打开该文件或文件夹.

安装:下载复制到plugin目录下面

配置:现在在你的~/.vimrc中增加下面两句

let g:winManagerWindowLayout='FileExplorer|TagList'

nmap wm :WMToggle<cr>

使用:配置后重启vim, 打开~/vim72/src/main.c, 在normal状态下输入 wm 左上边是netrw(文件目录)窗口, 左下边是TagList窗口, 当再次输入  wm 命令时这两个窗口又关闭了

在该界面上你可以用下面的一些命令来进行常用的目录和文件操作:

<F1> 显示帮助

<cr> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件

- 返回上级目录

c 切换vim 当前工作目录正在浏览的目录

d 创建目录

D 删除目录或文件

i 切换显示方式

R 文件或目录重命名

s 选择排序方式

x 定制浏览方式, 使用你指定的程序打开该文件

帮助: :help winmanager

6.Cscope 的使用

scope自己的话说 - "你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧, 关于它的介绍我就不详细说了, 如果你安装好了前文介绍的中文帮助手册, 用下面的命令看看介绍吧:  :help if_cscop.txt

安装Cscope:

如果你的系统中有cscope命令, 则可以跳过这一小段, 如果没有, 就先跟着我一起安装一个吧.

在Cscope的主页: http://cscope.sourceforge.net 下载一个源码包, 解压后编译安装:

# ./configure

# make

# make install       // 需要root权限

先在~/vimrc中增加一句:

:set cscopequickfix=s-,c-,d-,i-,t-,e-

这个是设定是否使用 quickfix 窗口来显示 cscope 结果, 用法在后面会说到。

 

跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 在项目的根目录运行下面的命令:

$ cd /home/fuhao/vim72/

$ cscope -Rbq

# 此后会生成三个文件 cscope.in.out cscope.out cscope.po.out

# 打开文件, 开始Coding

$ cd src

$ vi main.c

进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:

:cs add /home/fuhao/work/cscope.out  /home/fuhao/work 上面这条命令很重要, 必须写全, 不能只写前半句:

:cs add /home/fuhao/work/cscope.out

因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了. 如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.

 

下面我们来操练一下, 查找函数vim_strsave()的定义, 用命令:

:cs find g vim_strsave

按下回车后会自动跳转到vim_strsave()的定义处. 此时你肯定会说Ctags也可以做到这个呀, 那么下面说的这个Ctags就无法做到了, 我想查找vim_strsave()到底在那些地方被调用过了, 用命令:

:cs find c vim_strsave 

按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果

如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:

:cw

cscope的主要功能是通过同的子命令"find"来实现的

"cscope find"的用法:

cs find c|d|e|f|g|i|s|t name

0 或 s 查找本 C 符号(可以跳过注释)

1 或 g 查找本定义

2 或 d 查找本函数调用的函数

3 或 c 查找调用本函数的函数

4 或 t 查找本字符串

6 或 e 查找本 egrep 模式

7 或 f 查找本文件

8 或 i 查找包含本文件的文件

如果每次查找都要输入一长串命令的话还真是件讨人厌的事情, Cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>

nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> 当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.

按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了

<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"

cscope的其他功能你可以通过帮助手册自己慢慢学习

reset : 重新初始化所有连接。

用法  : cs reset

7、QuickFix 窗口

打开QuickFix的手册来学习吧:  :help quickfix

命令进行编译:    :make

显然编译会报很多错误, 当编译结束并退出到源码界面时, 刚才编译器报的错误都已经看不到了, 但是我们可以用QuickFix窗口再将错误信息找出来, 用下面的命令调出QuickFix窗口: :cw

下面的QuickFix窗口中我们可以找到每一个编译错误, 同样你可以用鼠标点击每一条记录, 代码会马上自动跳转到错误处, 你还可以用下面的命令来跳转:

:cn        // 切换到下一个结果

:cp        // 切换到上一个结果

如果你经常使用这两个命令, 你还可以给他们设定快捷键, 比如在~/.vimrc中增加:

nmap <F6> :cn<cr>

nmap <F7> :cp<cr>

其还有其他的命令/插件也会用到QuickFix窗口, 但是用法基本上的都是类似的, 本文后面还会用到QuickFix窗口, 接着往下看吧.

8.快速浏览和操作Buffer -- 插件: MiniBufExplorer

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

版本 6.3.2

安装 将下载的 minibufexpl.vim文件丢到 ~/.vim/plugin 文件夹中即可

手册 在minibufexpl.vim 文件的头部

在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念, 可以看vim的帮助:

:help buffer

vim自带的buffer管理工具只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观. 现在隆重向你推荐一款vim插件(plugin): MiniBufExplorer使用方法:

重新启动vim, 当你只编辑一个buffer的时候MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出,列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:

<Tab> 向前循环切换到每个buffer名上

<S-Tab> 向后循环切换到每个buffer名上

<Enter> 在打开光标所在的buffer

d 删除光标所在的buffer

以下的两个功能需要在~/.vimrc中增加:

let g:miniBufExplMapCTabSwitchBufs = 1

<C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开

<C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开

如果在~/.vimrc中设置了下面这句:

let g:miniBufExplMapWindowNavVim = 1 则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:

C-w,h j k l    向"左,下,上,右"切换窗口.

在~/.vimrc中设置:

let g:miniBufExplMapWindowNavArrows = 1 是用<C-箭头键>切换到上下左右窗口中去

9.c/h文件间相互切换 -- 插件: A

安装好a.vim后有下面的几个命令可以用了:

:A 在新Buffer中切换到c/h文件

:AS 横向分割窗口并打开c/h文件

:AV 纵向分割窗口并打开c/h文件

:AT 新建一个标签页并打开c/h文件 其他还有一些命令, 你可以在它的网页上看看, 我都没用过, 其实也都是大同小异, 找到自己最顺手的就行了.

我在~/.vimrc中增加了一句:

nnoremap <silent> <F12> :A<CR>

意思是按F12时在一个新的buffer中打开c/h文件

10.在工程中查找 -- 插件: Grep

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

版本 1.8

安装 把grep.vim 文件丢到 ~/.vim/plugin 文件夹就好了

手册 在grep.vim 文件头部

下面介绍它的用法:

vim有自己的查找功能, 但是跟shell中的grep比起来还是有些差距的, 有时Coding正火急火燎的时候, 真想按下F3, 对光标所在的词来个全工程范围的grep, 不用敲那些繁琐的命令, 现在福音来了, 跟我同样懒的人不在少数, 在grep.vim脚本的前部可以找到一些说明文档:

:Grep 按照指定的规则在指定的文件中查找

:Rgrep 同上, 但是是递归的grep

:GrepBuffer 在所有打开的缓冲区中查找

:Bgrep 同上

:GrepArgs 在vim的argument filenames (:args)中查找

:Fgrep 运行fgrep

:Rfgrep 运行递归的fgrep

:Egrep 运行egrep

:Regrep 运行递归的egrep

:Agrep 运行agrep

:Ragrep 运行递归的agrep

上面的命令是类似这样调用的:

:Grep   [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Rgrep  [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Fgrep  [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Rfgrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Egrep  [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Regrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Agrep  [<grep_options>] [<search_pattern> [<file_name(s)>]]

:Ragrep [<grep_options>] [<search_pattern> [<file_name(s)>]]

:GrepBuffer [<grep_options>] [<search_pattern>]

:Bgrep [<grep_options>] [<search_pattern>]

:GrepArgs [<grep_options>] [<search_pattern>]

但是我从来都不用敲上面那些命令的^_^, 因为我在~/.vimrc中增加了下面这句:

nnoremap <silent> <F3> :Grep<CR>

比如你想在/home/wooin/vim71/src/main.c中查找"FEAT_QUICKFIX", 则将光标移到"FEAT_QUICKFIX"上, 然后按下F3键,。

在最下面的命令行会显示:

Search for pattern: FEAT_QUICKFIX 此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:

Search for pattern: /<FEAT_QUICKFIX/> 然后按下回车:

在最下面的命令行会显示:

Search in files: *

是问你搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件:

Search in files: *.c *.h

然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果

11.自动补全
用过Microsoft Visual Studio的朋友一定知道代码补全功能, 输入一个对象名后再输入"."或者"->", 则其成员名都可以列出来, 使Coding流畅了许多, 实现很多懒人的梦想, 现在我要告诉你, 这不再是Microsoft Visual Studio的专利了, vim也可以做到! 下面由我来教你, 该功能要tags文件的支持, 并且是ctags 5.6版本, 可以看看前文介绍tags文件的章节.
我这里要介绍的功能叫"new-omni-completion(全能补全)", 你可以用下面的命令看看介绍:
:help new-omni-completion
你还需要在~/.vimrc文件中增加下面两句:
filetype plugin indent on 打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu 关掉智能补全时的预览窗口
请确定你的Ctags 5.8已经安装好, 并且生成的tags文件已经可以用了, 那么我们就要抄家伙开搞了.
用vim打开源文件
$ vi /home/fuhao/work/src/main.c 设置tags文件
:set tags=/home/fuhao/vim72/tags  随便找一个有成员变量的对象, 比如"parmp", 进入Insert模式, 将光标放在"->"后面, 
然后按下"Ctrl+X Ctrl+O", 此时会弹出一个下列菜单, 显示所有匹配的标签
此时有一些快捷键可以用:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项
如果你增加了一些成员变量, 全能补全还不能马上将新成员补全, 需要你重新生成一下tags文件, 但是你不用重启vim, 只是重新生成一下tags文件就行了, 这时全能补全已经可以自动补全了, 还真够"全能"吧.
vim中的其他补全方式还有:
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 拼写建议
12.加速你的补全 -- 插件: SuperTab
下载地址 http://www.vim.org/scripts/script.php?script_id=1643
版本 0.43
安装 把supertab.vim 文件丢到 ~/.vim/plugin 文件夹就好了
手册 supertab.vim 文件头部, 和命令 ":SuperTabHelp"
在上面一节中你应该学会了自动补全代码的功能, 按下"Ctrl+X Ctrl+O"就搞定了, 如果你够懒的话肯定会说"这么麻烦啊, 居然要按四个键", 不必为此自责, 因为Gergely Kontra 和 Eric Van Dewoestine也跟你差不多, 只不过人家开发了supertab.vim这个插件, 可以永远懒下去了, 下面我来教你偷懒吧.
在你的~/.vimrc文件中加上这两句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以后当你准备按"Ctrl+X Ctrl+O"的时候直接按<Tab>就好了, 够爽吧 ....
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>, 
" 现在改为<C-X><C-O>. 关于<C-P>的补全方式, 
" 还有其他的补全方式, 你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 - 不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止
13.代码折叠
vim提供以下6种方法来选定折叠方式:
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
可用选项 'foldmethod' 来设定折叠方法。比如, 如果想按照语法高亮来定义折叠, 则在
~/.vimrc中增加下面这行:
set foldmethod=syntax
set foldlevel=100  " 启动vim时不要自动折叠代码
这里主要是讲编程的, 所以我就只介绍按照语法高亮来折叠代码, 其他的折叠方法如果大家想用的话可以自己看看帮助手册, 大同小异的.
按照语法高亮来折叠代码, 其实就是按照代码中的一些括号来定义折叠位置, 比如: "{ }", "/* */". 现在练习一下, 就在nomal模式下输入命 令"za", 你会发现当前光标所在的最近的一层括号被折叠起来了, 再输入一遍"za"命令, 这个折叠又打开了, "za"命令就是打开/关闭当前折叠用的, 下面是常用的一些命令:
za打开/关闭当前折叠
zA 循环地打开/关闭当前折叠
zo 打开当前折叠
zc 关闭当前折叠
zM 关闭所有折叠
zR 打开所有折叠
14.提示函数原形-- 插件: echofunc
下载地址 http://www.vim.org/scripts/script.php?script_id=1735
版本 1.18
安装 把echofunc.vim 文件丢到 ~/.vim/plugin 文件夹就好了
手册 无
编程调用一个函数时, 最可恶的是忘了这个函数参数列表的详细定义了, 然后要跳转到定义处看看, 再跳转回来继续写, 如果参数列表太长了, 还要来回跳转多次
该插件的作用是当你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中. 如果这个函数有多个声明, 则可以通过按键"Alt+-"和"Alt+="向前和向后翻页, 这个两个键可以通过设置EchoFuncKeyPrev和EchoFuncKeyNext参数来修改, 还有一个要注意的地方, 这个插件的功能需要tags文件的支持, 并且在创建tags文件的时候要加选项"--fields=+lS", 整个创建 tags文件的命令如下:
$ ctags -R --fields=+lS
15,NERD_commenter.vim代码注释
" ------------------------ NERD_commenter
let NERDShutUp=1
let NERDSpaceDelims=1       " 让注释符与语句之间留一个空格
let NERDCompactSexyComs=1   " 多行注释时样子更好看
let mapleader = ","       切忌此处要有 否侧 ,cc 等无效,先定义,号
map <silent> <F5> ,cc<space> 
  " let NERD_java_alt_style=1
" Default mapping: [count],cc   " 以行为单位进行注释.
" ,c<space>     " comment <--> uncomment.
" ,cm           " 以段作为单位进行注释.
  " ,cs           " 简洁美观式注释.
  " ,cy           " Same as ,cc except that the commented line(s) are yanked first.
" ,c$           " 注释当前光标到行未的内容.
  " ,cA           " 在行尾进行手动输入注释内容.
" ,ca           " 切换注释方式(/**/ <--> //).
" ,cl           " Same cc, 并且左对齐.
" ,cb           " Same cc, 并且两端对齐.
" ,cu           " Uncomments the selected line(s).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值