欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vim 必备插件

程序员文章站 2022-03-19 14:59:10
...

Vim 必备插件

1、介绍

这篇文章介绍vim在linux命令行下的基本轻量级必备插件,运行环境是c/C++语言,也可以用于java,php等语言。这些必要插件包括ctag,taglist,NERDTree,和ag这四个。
有朋友问4个插件会不会少了一点,自动补全怎么办?跳转引用文件怎么办?语法检查怎么办?我一直坚信,“Less is more.”因此尽量用这几个插件的扩展以及vim本身的衍生功能解决。自动补全手动ctrl-n,文件跳转gf,语法检查就等编译时候来弄咯。最差的情况,以后用不习惯了,感觉复杂了在加个插件就可以。不过还是那句话,less is more,把现有的工具发挥极致才是最好的。
有一个说法,一个程序员说自己90%的时间在写代码,实际上他写代码的时间90%是在看代码,看代码是在理解符号之间的关系和逻辑。可想而知,真正敲代码的时间是多么的少。看代码,是本文介绍的4个必要插件的特长,辅助理解代码,基本上与写代码关系不大。
首先,简单说说每个插件的作用:

名称 功能
ctags 用于搜索文本之间的函数调用,实现跳转到定义,跳转到引用,跳转到实现等功能。
ag 搜索代码,类似于vs里头的全局搜索和Eclipse里头的File Search功能,可以查到被注释的代码。
taglist 侧边栏显示关键字,包括函数名(function),类定义(enum,struct,class),宏(macro,struct),全局变量等。
NERDTree 实现目录树浏览,相当于Project view。

2、效果

先上最终效果图,如下:
Vim 必备插件
左边是taglist的效果,右边是NERDTree的效果,中间是正文,下面是使用ag搜索的结果。看到右边tree目录下面有个名为tags的文件是cta*生的文件,是符号数据库,有了这个就可在文件中进行关键字跳转。

3、插件安装、配置和说明

我们安装上面列表ctags,taglist,ag,NERDTree的顺序来介绍。在我眼里,都很重要,但是重要性依次降低。

1、ctags

功能:
扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来。大部分的unix系统都有ctags软件,它能跟vim很好地合作。
安装:
ubuntu 14.0.4下面可以直接安装:

aaa@qq.com70MYA001CN:~$ sudo apt-get install ctags
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'exuberant-ctags' instead of 'ctags'
exuberant-ctags is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 319 not upgraded.

或者:
可以使用源代码安装

tar -xvf ctags-5.8.tar.gz
cd ctags-5.8
./configure --prefix=/usr/local/ctags
make && make install

添加到环境

sudo vi /etc/bash.bashrc
export PATH=/usr/local/ctags/bin:$PATH

然后配置安装的路径./configure这里有configure的参数简介 http://www.linuxidc.com/Linux/2010-12/30903.htm
我把源码安装在/usr/local/ctags目录下。

使用配置:
vim配置,在.vimrc里头加入

"...........ctags................
"ctags 设置。如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir
"...........ctags................

我使用的是c/c++环境,在工程根目录下面使用:
ctags -R –languages=c++ –langmap=c++:+.hpp –c++-kinds=+px –fields=+aiKSz –extra=+q

aaa@qq.com-70MYA001CN:/localdisk/octopus$ ctags -R --languages=c++ --langmap=c++:+.hpp --c++-kinds=+px --fields=+aiKSz --extra=+q

在目录下面就成了tags文件,如第一张图片显示。

2、taglist

taglist能够把当前文件中的宏、全局变量、函数等tags显示在分栏窗口,光标跳转到相应的tag操作,就跳到该tag定义的位置。
安装:
现在我们到http://www.vim.org/scripts/script.php?script_id=273下载最新版本的taglist plugin,目前版本是4.6
下载后,把该文件在~/.vim/目录中解压缩,这会在~/.vim/plugin和~/.vim/doc目录中各放入一个文件,或者在其他目录解压,手动拷贝进~/.vim/plugin和~/.vim/doc目录:

plugin/taglist.vim – taglist插件
doc/taglist.txt    - taglist帮助文件 

使用配置:
下面是taglist的配置

"...........taglist................
"启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1
"不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1
"taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1
"taglist窗口显示在右侧,缺省为左侧
"let Tlist_Use_Right_Window =1
"设置taglist窗口大小
"let Tlist_WinHeight = 100
let Tlist_WinWidth = 40
"...........taglist................

这样配置之后,vim的窗口就能在载入后自动显示taglist,并且防止左边栏,如图1的左边栏。
最后,ctag和taglist不会自动更新,修改文件,增加或减少定义后不会自动加入相关的数据库。因此加入一个自动更新函数,并且设置快捷键更新。配置文件.vimrc加入如下:

"...........ctag and taglist update................
function! UpdateCtags()
    let curdir=getcwd()
    while !filereadable("./tags")
        cd ..
        if getcwd() == "/"
            break
        endif
    endwhile
    if filewritable("./tags")
        !ctags -R --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q
        TlistUpdate
    endif
    execute ":cd " . curdir
endfunction

"更新ctags标签文件快捷键设置
nnoremap <F10> :call UpdateCtags()<CR><CR>
"...........ctag and taglist update................

这样,当修改了相关定义就可以手动按F10更新了。也可以吧UpdataCtags函数写在切换模式的时候,这样可以实时更新,但是如果项目大会造成系统卡顿。具体方法不赘述。

3、ag

Ag本身(又叫the silver searcher)并不是一个Vim插件,而是一个代码搜索工具。Ag插件用于全局的文件搜索,例如注释搜索,文本搜索等情况。同时可以通过配置文件对需要搜索的文件进行过滤以进一步提供搜索效率。
安装:
Ag安装可以参见github上说明https://github.com/ggreer/the_silver_searcher,我这里是ubuntu,这样就好:

aaa@qq.com-70MYA001CN:/localdisk/octopus$apt-get install silversearcher-ag

使用配置:
vim的配置可以参考:https://github.com/rking/ag.vim
我没有安装vim插件管理器,因此:

cd ~/.vim/bundle && git clone https://github.com/rking/ag.vim ag && echo "set runtimepath^=~/.vim/bundle/ag" >> ~/.vimrc

.vimrc里头加入

"...........ag................
set runtimepath^=~/.vim/bundle/ag
nnoremap <leader>f :Ag! ""<left>
"...........ag...............

OK,ag也配置好了,leader我设置为”,”。

4、NERDTree

NERDTree的作用就是列出当前路径的目录树。可以方便的浏览项目的总体的目录结构和创建删除重命名文件或文件名。
NERDTree的官网是:http://www.vim.org/scripts/script.php?script_id=1658
安装:
下载压缩包解压后,
把NERD_tree.vim放到in ~/.vim/plugin
把NERD_tree.txt放到~/.vim/doc
使用配置:
配置.vimrc。就3条:

"...........NERDTree................
let NERDTreeWinPos='right'
let NERDTreeAutoCenter=1
"设置taglist打开关闭的快捷键F8
noremap <F9> :NERDTree<CR>
"...........NERDTree...............

默认是不打开的。打开后效果如图1。

4、使用说明

如果上面四个插件都安装好了。那么可以开始使用了。
窗口切换:

命令 功能
ctr+w+h/j/k/l normal下窗口切换

主界面命令

命令 功能
leader+f Ag搜索
F9 打开NERDTree
F10 更新tags
CTRL-p 向后搜索自动补全
CTRL-n 向前搜索自动补全
CTRL-] 跳转到tags的声明/实现
gd 跳转到tags的局部定义
gf 文件跳转
CTRL-o 跳转上次位置
CTRL-i 跳转下次位置
[[ 是向前找函数头
]] 是向后找函数头
[] 是向前找函数尾
][ 是向后找函数尾
leader f 调用ag

Taglist面命令

命令 功能
Enter/P 跳到光标下tag所定义的位置
p 跳到光标下tag所定义的位置,光标不跳转
Space 简要显示光标下tag的原型/定义
s 更改排序方式,在按名字/出现顺序排序间切换
+ 打开一个折叠
- 将tag折叠起来
* 打开所有的折叠
= 将所有tag折叠起来

NERDTree面命令

命令 功能
Enter 进入文件/目录
k,j 上/下移动
K,J 到最前/最后一个节点
o 在已有窗口中打开文件、目录或书签,并跳到该窗口
go 在已有窗口中打开文件、目录或书签,但不跳到该窗口
! 执行此文件
p 到上层目录
t 在新Tab中打开选中,并跳到新Tab
T 在新Tab中打开选中,但不跳到新Tab
gT 前一个tab
gt 后一个tab
m 文件操作菜单,添加删除新文件

5、最后

这样,几乎就拥有了一个功能强大的代码浏览器了。