玩转VIM,让插件带你飞

by wdscq1234

CSDN博客推荐文章 / 2016-07-10 00:14

写在前面

    对于很多经常使用Linux的童鞋来说,VIM并不陌生,有很多强悍的功能,但是比起Windows的下的某些代码编辑查看工具,在方便和实用性上还是逊色不少。但是,VIM得可塑性非常强,可以扩展支持很多的插件,使用这些插件,我们能够完全将其打造成一款Linux下的酷炫IDE。 于是通过参考相关的文章以及VIM官方插件的官方帮助,总结了这篇玩转VIM,让插件带你飞的文章!

目的:为了能够在VIM下能够高效的编写阅读源代码!

接下来,我们先从source insight的基本功能说起,如下图,可以看到基本的功能区域

1.源代码编辑显示区域

2.文件目录树显示区域

3.函数符号显示区域

4.文件符号显示区域

5.当前选中的函数区域

6.隐藏的强大搜索功能

我们目的就是将VIM 打造成类似与source insight的强悍工具,下面我会为大家一步一步的介绍HowTo,在介绍之前,先上王道!大笑

 

图中实现的功能:

1. 文件浏览器

2. Tag浏览器

3.字符高亮

4.自动补全

5.快速搜索

6.智能标签

  在进入正题之前,先把本教程需要的插件和工具的功能和下载地址列在此处,需要时可随时下载。

相关的插件和工具:

插件 作用 下载
Vimdoc 中文帮助支持 https://sourceforge.net/projects/vimcdoc/files/vimcdoc/
Ctags 为整个源文件目录创建tag https://sourceforge.net/projects/ctags/
Taglist 管理ctags生成的tag http://www.vim.org/scripts/script.php?script_id=273
WinManager 管理taglist和netrw http://www.vim.org/scripts/script.php?script_id=95
智能补全 自带的智能补全插件 自带
OmniCppComplete C++档案智能补全插件 http://www.vim.org/scripts/script.php?script_id=1520
Echofunc   可以提示函数原型 http://www.vim.org/scripts/script.php?script_id=1735
Visual mark 高亮书签 http://www.vim.org/scripts/script.php?script_id=1026
Quickfix 智能编译 自带
Easygrep 快速搜索功能 http://www.vim.org/scripts/script.php?script_id=2438
MiniBufExplorer 快速浏览操作多个文件 http://www.vim.org/scripts/script.php?script_id=159
Cscope 集ctags和搜索功能与一身 http://cscope.sourceforge.net

Vim的基本配置与常用命令

      这步主要熟悉一下VIM的相关的配置,不用安装任何插件,对于已经比较熟悉VIM基本操作的童鞋可以忽略了!

基本操作命令

    对于基本的操作命令不详细多说,已经有大神总结了,直接借鉴过来,原文已经写在参考文献的link上

中文帮助包

         不习惯使用英文的同学有福利了,看着母语,感觉还是爽爽的,水平高的童鞋可以忽略。
vimdoc中文版的下载地址:
安装:
    a.tar zxvf vimcdoc-<version>.tar.gz  
    b.cd vimcdoc-<version>
    c../vimcdoc.sh -i 
执行完上述3步,就完成了中文版帮助的安装,不需要root权限,效果如下图:

Vim基础配置

    这部分主要是通过配置~/.vimrc来实现的,默认情况下VIM好多的功能是享受不到的,需要配置研究挖掘才能像sourceinsight那样显示的很nice,VIM的美需要我们使用探索的眼睛去挖掘! 当然VIM的强大功能就是来源于各种插件以及基础配置的结合,一般情况下在~/下新建一个.vimrc的配置文件用作配置                             

这里列出几点:

a.在VIM中捕捉鼠标信号

:set mouse=a

b.设置语法高亮

syntax on

c.显示行号

set nu

d.高亮显示光标所在的行为红色,颜色可以修正,也可以之家下划线

set cursorline   hi CursorLine cterm=NONE  ctermbg=darkred ctermfg=white   hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white

打造tag预览,享受飞来飞去


     要想在source code中飞来飞去,这个就需要请ctags和taglist二位出山了,ctags生成source code的tag,然后taglist就是通过图形界面的形式将这些tags给显示出来,供我们操作

ctags

  ctags: 主要功能建立整个源码库中函数 变量 宏定义等的tag,方面在阅读源代码中能够快速的定位切换,这样可以实现跳来跳去…

  Tags文件中包括这些对象的列表:用#define定义的宏枚举型变量的值函数的定义、原型和声明名字空间(namespace)类型定义(typedefs)变量(包括定义和声明)类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数VIM用这个“tags”文件来定位上面这些做了标记的对象。

  如何使用tags? 

  a.安装

     cmd:book@book-virtual-machine:~/source_code/linux-3.18.36$sudo apt-get install ctags
     或者是通过表格中的地址下载,make/make install这样的方式安装,需要root权限

  b.使用

    ->ctags -R *  首先要建立tags,进入源代码目录树使用这个cmd,可以生成tags文件。
    -> 配置~/.vimrc,将产生的tag添加到vim中

    set tags=tags           set tags+=./tags "add current directory's generated tags file

         ->打开vim,尝试使用tags,鼠标指针指向一个函数名字,然后使用CTRL+]按键,看是否有跳到函数实现处!

  c.常用的cmd

跳转到光标下函数或者变量的标签 : CTRL + ] 

返回上一个标签:                  CTRL +  T

跳到指定的标签: tag [TagName]

新创建一个窗口,显示标签的内容 CTRL + W + ] 

新建一个预览窗口,显示指定标签内容:ptag TagName   

关闭预览窗口: pclose

在预览窗口编辑,头文件 pedit file.h  

说了这么多,来几张图欣赏下:

这张图是光标定位到unix_mkname上,然后按CTRL+W+],就会新建一个窗口,并显示unix_mkname的内容,这个cmd是使用最频繁的,切记,当然后期可以用鼠标代替,但是快捷键比鼠标可快多了,CTRL+T是返回到前一个tag

这张图是如何搜索一个tag,:tag xxx, 直接跳转到tag处

这张图是如何搜所tag 并在一个新窗口显示

taglist

      taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用,因此在使用taglist之前,确保已经安装了ctags。

a.安装

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

     放到~/.vim 目录下,直接解压 unzip taglist_46.zip

     进入doc 目录,开启vim 并且执行:helptags. cmd 来 处理taglist help 文件,如果不执行此步骤,你不会跳到taglist的help topic

b.配置

     要方便的使用taglist,需要进行一些配置放到~/.vimrc中

<span style="font-family:KaiTi_GB2312;">let Tlist_Show_One_File=1   "taglist同时只展示1个文件的sysmbol列表,0 支持展示多个"   let Tlist_Use_Right_Window=0  "0的话就是显示在左边, 1 是右边"   let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个窗口时,自动退出Vim"   let Tlist_Process_File_Always=1 "实时更新tags"</span>

 c.使用

     经过上述配置可以打开vim,使用:Tlist来打开关闭Taglist的管理窗口,可以看到函数的macro、struct、function的tag,使用鼠标双击即可跳转!

使用过程中的图示,可以看到左边显示了本file的所有symbol,选择你自己的需要的双击,直接跳过去!


管理器Winmanager   

     Winmanager是在Vim6.0中实现经典windows类型的IDE的插件,安装了此插件,你将会有一个目录树并,可以单独的操作每一个目录,每一只file,buffer list 随着你动态的编辑改变,  它尽可能的占用最小的空间来展示所有当前被列出的windows,这里所说的管理器主要用来管理我们的文件浏览器netrw和标签浏览器taglist,netrw是vim自带的插件!

a.安装

2.Copy 下载file到~/.vim/
3.unzip 解压

           – plugin/ 
              winmanager.vim 
              winfileexplorer.vim 
              wintagexplorer.vim 
           – doc/ 
              winmanager.txt 

4.vim -c “helptags ~/.vim/doc” -c “q”  (unix) 

b.配置

let g:winManagerWindowLayout=' FileExplorer | TagList' “设置要管理的组件”   nmap wm:WMToggle<cr> "映射快捷键wm"

c使用

    使用wm 打开关闭 FileExplorer 和 Taglist   如下图,也可以像Windows 一样 双击进入某个文件了…

更多方便的操作与配置 可以参考 :help winmanager,不断学习才能打造经典!

使用图示:

精雕细琢 

     经过上面的配置,一个IDE基本成型,能够不断在symbol中跳来跳去,也能够实施的去找到自己需要的File 并且快速显示,其实这些并不能完全满足我们,仍然需要进一步精雕细琢的打磨 才能出好的东西!接下来会介绍几款小的插件,让我们的操作更加流畅,如果你知道好的插件,也可以留言告知,后面会增加!

Omnicompletion

     全能补全的功能source insight 都没有,使用Microsoft Visual Studio的visial studio的人应该使用过特别酷,这个是vim自带的,不用下载,直接使用

使用前配置~/.vimrc

filetype plugin indent on  “文件类型自动检测”


CTRL-X CTRL-O 开始全能补全
直接上图:看着是不是有点眼花缭乱,比较复杂的函数使用还可以,简单的就别用了.. 选择恐惧症者慎用!
唯一的不足之处需要选定挨个挑…多了还是很麻烦

OmniCppComplete

     如果上一个用不习惯可以使用这个OmniCppComplete,这个脚本运行至少咋7.0或者更高的版本,提供了对C/C++支持,不过这个tool的基础也是ctags的数据库
并且在~/.vim 目录下解压
优势与功能:
    –   Complete namespaces, classes, structs and union members. 
    –   Complete inherited members for classes and structs (single and multiple inheritance). 
    –   Complete attribute members eg: myObject->_child->_child etc… 
    –   Complete type returned by a function eg: myObject->get()->_child. 
    –   Complete the “this” pointer. 
    –   Complete a typedef. 
    –   Complete the current scope (global and class scope). 
    –   Complete an object after a cast (C and C++ cast). 
    –   Complete anonymous types (eg: struct {int a; int b;}g_Var; g_Var.???). It also works for a typedef of an anonymous type.
  
在使用此工具之前tags需要这样生成:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .   --c++-kinds=+p  : 为C++文件增加函数原型的标签   --fields=+iaS   : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)   --extra=+q      : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

同时需要配置下.vimrc [这是参考大神的配置,可以选择性配置]
"-- omnicppcomplete setting --   " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码   imap <F3> <C-X><C-O>   "按下F2根据头文件内关键字补全”   imap <F2> <C-X><C-I>   set completeopt=menu,menuone " 关掉智能补全时的预览窗口   let OmniCpp_MayCompleteDot = 1 " autocomplete with .   let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->   let OmniCpp_MayCompleteScope = 1 " autocomplete with ::   let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)   let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files   let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window   let OmniCpp_GlobalScopeSearch=1 " enable the global scope search   let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members   "let OmniCpp_DefaultNamespaces=["std"]   let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column   let OmniCpp_ShowAccess=1

相关的帮助文档可以使用 :help omnicppcomplete
看效果图

Echofunc  提示函数原型

     这个插件用处不是特别大,但是在coding的时候有也是很nice的

下载地址在这里:http://www.vim.org/scripts/script.php?script_id=1735

主要功能就是在命令栏显示C/C++的函数声明

安装: 把echofunc.vim 放到~/.vim/plugin目录下即可

使用如下cmd去create tags 包含语言和signature fields  

ctags -R –fields=+IS                                                      

介绍:                                                                   
在插入模式下,你写完一个函数名字去写‘(’的时候这个函数的声明就会自动显示在命令行里,你可以使用ALT+- 和ALT+=来循环切换同样函数名的声明 
(Configurable via EchoFuncKeyPrev and EchoFuncKeyNext) .                                                                                     

另外一个feature就是 如果在编译vim的时候+balloon_eval, 那么当鼠标放在一个函数名字上之后会弹出tip显示

因为信息栏经常被其他的插件给清除,一个不错的选择就是让函数声明信息在状态栏显示, 首先增加%{EchoFunGetStatusLine()}到你的状态栏的option,然后增加一个配置在.vimrc let g:EchoFuncShowOnStatus = 1

在statusline 选项

可选配置项:

let g:EchoFuncShowOnStatus = 1     “显示在状态栏

效果如图

                                                                            

高亮书签Visual Mark

  像UltraEdit的Bookmark一样,主要是在看code的时候 对经常看的地方可以加标签,来回切换。Visual Mark就实现了这样一个功能

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


a. 对于gvim来说 直接使用CTRL + F2来 添加一个visual mark

    对于vim/gvim 使用mm来添加一个visual mark, 添加上mark之后 ,本行会变成高亮

b. 使用F2来在各个mark中来回切换,使用shift F2 反向切换

If you do not like the highlighting scheme, you could change “SignColor” in the script

这句话的意思是在visual mark.vim中修改颜色

if &bg == "dark"  // 根据你的背景色风格来设置不同的书签颜色    highlight SignColor ctermfg=white ctermbg=blue guifg=wheat guibg=peru   else             // 主要就是修改guibg的值来设置书签的颜色    highlight SignColor ctermbg=white ctermfg=blue guibg=grey guifg=RoyalBlue3   endif

使用可以看图:在这个地方会出现一个错误提示:Can not set language to en_Us  这个地方看起来不兼容linux,可以修改下visualmark.vim

将       exec ":lan mes en_US"    改为       exec ":lan POSIX"


Quickfix

   其实这个场景大约可以用在写测试程序中,一般的大程序比较复杂弄起来不是很方便,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。 利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行修改,方便的很。

     如果你的project使用了makefile,那么其实vim的make cmd就够用了,如果使用时cmd 编译,那么血药配置makeprg的值。用一个很简单的例子来看下如何使用:

配置编译:

:set makeprg=gcc test.c -o hello

make

这样就可以看到结果了,可以使用copen打开QickFix  close 关闭QickFix, 看图说话


EasyGrep 

     其实在写EasyGrep之前,准备是使用csope OR grep插件来讲述搜索的功能,但是偶然间发现了EasyGrep这个插件,使用了下,觉得EasyGrep更好用一些,它是一个在多个文件中高效的查找与替换的工具,要VIM 7.0以上才会支持, Vim其实已经集成了文件间的搜索功能,使用vimgrep 和grep 命令,但是EasyGrep使得使用这些功能更加的简单,并且还提供了更加强劲的Replace操作,默认vim中替换操作可不是那么容易操作哈,使用Easygrep,你看搜索你想要的关键词在所有的文件中或者仅仅是打开的文件中以及或者是当前的文件。另外,你也可以非常使用的搜索隐藏的文件,在linux中就是.开头的文件而且也有效的利用了Quickfix的窗口,将结果显示在里面!

下载安装:

http://www.vim.org/scripts/script.php?script_id=2438

放到.vim目录下unzip 即可!

配置.vimrc

let g:EasyGrepFileAssociations=~/.vim/plugin/EasyGrepFileAssociations "指定同步文件类型"   let g:EasyGrepMode = 2  "跟踪当前扩展"   let g:EasyGrepCommand = 0 “选择cmd为vimgrep,但是测试使用Grep也可以”   let g:EasyGrepRecursive = 1 “启动递归搜索”   let g:EasyGrepHidden = 1 “搜索隐藏文件”   let g:EasyGrepFilesToExclude = “*.bak, *~, cscope.*, *.a, *.o, *.pyc, *.bak”   “排除不想搜索的file类型”   let g:EasyGrepAllOptionsInExplorer = 1 “在使用GrepOption是是否显示所有配置项, 1 是显示”   let g:EasyGrepWindow = 0 “默认情况下也为0  就是Quickfix窗口”   let g:EasyGrepJumpToMatch = 1 “跳转第一个..”   let g:EasyGrepInvertWholeWord = 1 “搜索整个单词”   let g:EasyGrepFileAssociationsInExplorer = 1; "文件中显示关系表"   let g:EasyGrepReplaceWindowMode = 1 “全局代替时,执行当前窗口与下一个窗口拆分”

使用快捷键:

    <leader>vv :  实际上是 v v 按下这三个按键之后,会搜索光标所在的字串, ccl 取消显示的窗口

    <leader>vr:      先搜索 后替代

使用cmd:

    :Grep [arg]   搜索指定的参数

    :Replace [target] [replacement]   替代

    :ReplaceUndo   撤销

    :GrepOptions  打开配置界面可以配置一些参数


GitHub上有一个比较好的使用例子,在这里展示给大家

MiniBufExplorer

  这个工具主要使用在编辑多个文件的时候,其实还是很常用了,比较简单

下载之后,复制minibufexpl.vim到.vim/plugin目录下即可,下载地址

http://www.vim.org/scripts/script.php?script_id=159

./.vimrc中不用配置什么就可以使用了!  如果做一些配置 详细的解释可以参照https://github.com/fholgado/minibufexpl.vim的说明

主要操作是使用鼠标切换文件,双击即可,也可以配置成tab!

直接上图:

参考文章

http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html#3244380

http://blog.chinaunix.net/uid-11829250-id-484193.html

http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html#3244380

http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/

作者:wdscq1234 发表于2016/7/9 22:50:24 原文链接
阅读:45 评论:0 查看评论

—