vim IDE
本打算在之前一篇讲基础的博客里继续写的,但是考虑到篇幅不利与阅读,以及本文是针对打造 IDE 环境,所以单写一篇。不求普适。
所用插件:
vim =》 很多 linux 发行版都没有安装完整的 vim。请自行安装。
exuberant-ctags =》这是基础插件,主要功能就是分析变量/函数符号,方便定位。其它很多插件依赖于此插件。
TagList =》 高效浏览代码中的变量和函数。类似 sourceInsight 左边的 Symble 窗口。
WinManager =》 文件浏览器。
MiniBufExplorer =》 多文件可视化切换。 直接在不同窗口切换。
c/h switch =》 .c/.cpp 与 .h 文件快速切换。
VisualMark =》 可视化的书签。
C/C++ omni-completion =》 快速补全。
cscope =》 查找函数定义,函数引用,文本,文件。
1. vim
`sudo get-install -y vim`
2. exuberant-ctags
安装:
a. `sudo apt-get install -y exuberant-ctags`
b. 在工程目录的最上层目录, 执行 `ctags -R`。 此时会生成 tags 文件。
使用:
Ctrl+] =》 前往光标函数的 definition。(向栈中压入跳转前地址,并跳转到该函数定义)
Ctrl+t =》 返回。(无论此时光标在哪,只要栈上有数据,都可以返回上一个位置)
如图,工作目录下有 main.cpp, foo.h/cpp, bar.h/cpp 共 5 个文件:
如下:
在 main.cpp 中进行查询
3. TagList
依赖于 ctags,因此必须事先建立 tags 文件。
安装:
a. 到 http://www.vim.org/scripts/script.php?script_id=273 下载最新版 taglist_xx.zip
b. 解压到 ~/.vim/ 目录下。
使用:
重新启动 vim,`:Tlist`.
打开多个文件后, 实现不同模块的函数方便的跳转。
4. WinManager
非常方便的定位文件。
安装:
a. 到 http://www.vim.org/scripts/script.php?script_id=95 下载最新版
b. 解压到 ~/.vim/ 目录。
使用:
重新启动 vim,`:WMToggle`.
(下表参考 1.)
<F1> | 显示帮助 |
<cr> | 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件 |
- | 返回上级目录 |
c | 切换vim 当前工作目录正在浏览的目录 |
d | 创建目录 |
D | 删除目录或文件 |
i | 切换显示方式 |
R | 文件或目录重命名 |
s | 选择排序方式 |
x | 定制浏览方式, 使用你指定的程序打开该文件 |
此外, WinManager 通常都和 Tlist 一起使用,
使用:
编辑 ~/.vimrc, 加入
let g:winManagerWindowLayout='FileExplorer|TagList' " 这行是让 WinManager 和 Tlist 共处同一窗口。
nmap wm :WMToggle<cr> “ 这行是定义快捷键。
重启 vim 后,`wm` 如图:
5. MiniBufExplorer
安装:
a. http://www.vim.org/scripts/script.php?script_id=159
b. 拷贝 minibufexpl.vim 到 ~/.vim/plugin/
c. 向 ~/.vimrc 中添加 `let g:miniBufExplMapWindowNavVim=1` 可使 Ctrl+h/j/k/l 直接在不同窗口切换。
使用:
重启 vim,同时打开多个文件:`vim main.cpp foo.h foo.cpp`
切入 minibuf 窗口:Ctrl-w, k
Tab 键切换不同的文件, Enter 进入文件。
6. c/h switch
安装:
http://www.vim.org/scripts/script.php?script_id=31
拷贝 a.vim 到 ~/.vim/plugin/
使用:
重启 vim,打开 foo.h
`:A` 即可快速切换到此文件对应的 .h 或 .c/.cpp。
7. VisualMark
安装:
http://www.vim.org/scripts/script.php?script_id=1026
拷贝 visualmark.vim 到 ~/.vim/plugin/
目前我安装的 0.4,每次 `mm` 都会遇到 错误,只要修改一下脚本就好了。 找到 ~/.vim/plugin/visualmark.vim, 修改 `exec ":lan mes en_US"` 为 `"exec ":lan mes en_US"` (就是在这句话前面加以个双引号,表示注释掉这句话),保存后重启 vim 即可。
使用:
`mm` 设置书签
F2 以及 Shift-F2 跳转到下一个或上一个书签。
8. C/C++ omni-completion
安装:
http://www.vim.org/scripts/script.php?script_id=1520
基于 ctags,因此需要生成 tags 文件。此外,为了支持 c++ 的成员补全,需要这样生成 tags `ctags -R --c++-kinds=+px --fields=+aiKSz --extra=+q`. 具体含义: http://blog.chinaunix.net/uid-11640640-id-2139790.html. 大致就是说:递归分析子目录,包含 c++ 的各种声明,包含类权限/继承等信息。
在 ~/.vimrc 中加入:`filetype plugin indent on`。
使用:
重启 vim,在 main.cpp 中输入 `fo<Ctrl-x><Ctrl-o>` 即出现自动补全的信息。
使用 Ctrl-n 和 Ctrl-p 向下或向上切换。
当使用类成员时,会自动出现补全信息。
9. cscope
安装:
`sudo apt-get install -y cscope`
将 http://cscope.sourceforge.net/cscope_maps.vim 复制, 保存到 ~/.vim/plugin/ 目录下。
将 `:set cscopequickfix=s-,c-,d-,i-,t-,e-` 添加到 ~/.vimrc 中。这样搜索结果就会展现在 quickfix 窗口中。(输入 `:cw` 查看 quickfix 窗口)
首先要生成数据文件,在工作目录顶层:`cscope -Rd`。
使用:
重启 vim,首先载入符号数据库 `:cs add cscope.out .` 注意后面还有一个 `.`
然后就可以查询了, 如: `:cs find g foo`. 查看 foo 定义。
(下表引用自参考 1)
0 或 s | 查找本 C 符号(可以跳过注释) |
1 或 g | 查找本定义 |
2 或 d | 查找本函数调用的函数 |
3 或 c | 查找调用本函数的函数 |
4 或 t | 查找本字符串 |
6 或 e | 查找本 egrep 模式 |
7 或 f | 查找本文件 |
8 或 i | 查找包含本文件的文件 |
查看 main 函数都调用了哪些函数:
参考:
1. http://blog.csdn.net/wooin/article/details/1858917
其它:
我把自己的 .vim 目录 .vimrc 文件打包放在这里: https://files.cnblogs.com/walfud/vimDir_vimrc.zip
有兴趣欢迎交流:walfud.s@gmail.com