标签:
对于很多经常使用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基本操作的童鞋可以忽略了!
这部分主要是通过配置~/.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
ctags: 主要功能建立整个源码库中函数 变量 宏定义等的tag,方面在阅读源代码中能够快速的定位切换,这样可以实现跳来跳去...
Tags文件中包括这些对象的列表:用#define定义的宏枚举型变量的值函数的定义、原型和声明名字空间(namespace)类型定义(typedefs)变量(包括定义和声明)类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数VIM用这个“tags”文件来定位上面这些做了标记的对象。
如何使用tags?
cmd:book@book-virtual-machine:~/source_code/linux-3.18.36$sudo
apt-get install ctags
或者是通过表格中的地址下载,make/make install这样的方式安装,需要root权限
set tags=tags set tags+=./tags "add current directory's generated tags file
->打开vim,尝试使用tags,鼠标指针指向一个函数名字,然后使用CTRL+]按键,看是否有跳到函数实现处!
跳转到光标下函数或者变量的标签 : 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处
taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用,因此在使用taglist之前,确保已经安装了ctags。
下载地址:http://www.vim.org/scripts/script.php?script_id=273
放到~/.vim 目录下,直接解压 unzip taglist_46.zip
进入doc 目录,开启vim 并且执行:helptags. cmd 来 处理taglist help 文件,如果不执行此步骤,你不会跳到taglist的help topic
要方便的使用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>
Winmanager是在Vim6.0中实现经典windows类型的IDE的插件,安装了此插件,你将会有一个目录树并,可以单独的操作每一个目录,每一只file,buffer list 随着你动态的编辑改变, 它尽可能的占用最小的空间来展示所有当前被列出的windows,这里所说的管理器主要用来管理我们的文件浏览器netrw和标签浏览器taglist,netrw是vim自带的插件!
- plugin/
winmanager.vim
winfileexplorer.vim
wintagexplorer.vim
- doc/
winmanager.txt
let g:winManagerWindowLayout=' FileExplorer | TagList' “设置要管理的组件” nmap wm:WMToggle<cr> "映射快捷键wm"
使用wm 打开关闭 FileExplorer 和 Taglist 如下图,也可以像Windows 一样 双击进入某个文件了...
更多方便的操作与配置 可以参考 :help winmanager,不断学习才能打造经典!
使用图示:
经过上面的配置,一个IDE基本成型,能够不断在symbol中跳来跳去,也能够实施的去找到自己需要的File 并且快速显示,其实这些并不能完全满足我们,仍然需要进一步精雕细琢的打磨 才能出好的东西!接下来会介绍几款小的插件,让我们的操作更加流畅,如果你知道好的插件,也可以留言告知,后面会增加!
全能补全的功能source insight 都没有,使用Microsoft Visual Studio的visial studio的人应该使用过特别酷,这个是vim自带的,不用下载,直接使用
使用前配置~/.vimrc
filetype plugin indent on "文件类型自动检测"
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . --c++-kinds=+p : 为C++文件增加函数原型的标签 --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S) --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
"-- 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
这个插件用处不是特别大,但是在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 "显示在状态栏
效果如图
像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"
如果你的project使用了makefile,那么其实vim的make cmd就够用了,如果使用时cmd 编译,那么血药配置makeprg的值。用一个很简单的例子来看下如何使用:
配置编译:
:set makeprg=gcc\ test.c\ -o\ hello
make
这样就可以看到结果了,可以使用copen打开QickFix close 关闭QickFix, 看图说话
其实在写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上有一个比较好的使用例子,在这里展示给大家
这个工具主要使用在编辑多个文件的时候,其实还是很常用了,比较简单
下载之后,复制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/
Linux Vim常用命令配置,插件ctags/taglist/WinManager/Easygrep,打造强悍IDE
标签:
原文地址:http://blog.csdn.net/wdscq1234/article/details/51815531