vim插件之快速切换头(.h)/源(.c,.cpp,.cc)文件——a.vim
1. 官网
当前最新版本:v2.18,更新日期:
2007-06-07
。
2.概述
浏览/编辑代码的时候,常常需要在头文件(.h)和源文件(.c,.cpp,.cc...)之间切换,或者打开某个包含文件(如#include ...),a.vim正是用来满足以上需求的一款Vim插件。
3. 安装
- 手动安装:下载a.vim后拷贝至Vim插件目录(一般为~/.vim/plugin),必要时再重启一下Vim就可以使用了。
- 自动安装:(使用Vundle插件管理器)
- Bundle ‘a.vim’
- BundleInstall
- Bundle ‘a.vim’
4. 使用
- 头/源文件切换命令
- :A 头文件/源文件切换
- :AS 分割窗后并切换头/源文件(切割为上下两个窗口)
- :AV 垂直切割窗口后切换头/源文件(切割为左右两个窗口)
- :AT 新建Vim标签式窗口后切换
- :AN 在多个匹配文件间循环切换
- 将光标所在处单词作为文件名打开
- :IH 切换至光标所在文件
- :IHS 分割窗口后切换至光标所在文件(指将光标所在处单词作为文件名打开)
- :IHV 垂直分割窗口后切换
- :IHT 新建标签式窗口后切换
- :IHN 在多个匹配文件间循环切换
- 快捷键操作
- <Leader>ih 切换至光标所在文件*
- <Leader>is 切换至光标所在处(单词所指)文件的配对文件(如光标所在处为foo.h,则切换至foo.c/foo.cpp...)
- <Leader>ihn 在多个匹配文件间循环切换
- *<Leader>指Vim所定义的映射(map)前缀,在Vim配置文件中可过变量'mapleader'进行设置,缺省为'\'。
5. a.vim的改进
由于经常在linux下写c,遇到了和大家一样的问题,就是经常需要在头文件和源代码之间跳转。由于两个文件不在同一个目录上,于是每次都是要直接打:e ../include/model/foo.h之类的。
后来在网上查到a.vim可以实现这个功能,于是马上down下来。经过实验和看源码发现,a.vim仅仅支持头文件和源码在当前路径,以及../source ../src ../include ../inc这4个目录下面。但是经常会有这样的目录结构:
prject:
|---model_a
|---model_b
|---include
|---model_a
|---model_b
对于这样的结构除非设置g:alternateSearchPath,否则没有办法。于是花了点时间对a.vim动个手术。改进如下:
1.找到
EnumerateFilesByExtensionInPath函数
2.增加一行代码:
let parentPath = expand("%:p:h:t")
3.在
if (pathSpec != "")之后添加如下代码:
let path = <SID>ExpandAlternatePath(pathSpec . "/" . parentPath, a:relPathBase)
let pe = EnumerateFilesByExtension(path, a:baseName, a:extension)
if (enumeration == "")
let enumeration = pe
else
let enumeration = enumeration . "," . pe
endif
哈哈,以后在文件之间切换就方便了。
BTW: Vim中CTL+^可以在两个文件之间来回切换,等同:e #。这样就不用敲命令了。
该插件要求VIM 7.2 以上
本文来源(有部分修改):
http://blog.163.com/023_dns/blog/static/1187273662012123104319662/