vim插件之快速切换头(.h)/源(.c,.cpp,.cc)文件——a.vim

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
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/
改进部分引用自: http://blog.chinaunix.net/uid-1720597-id-84773.html
本文历史:
2015.1.12     v1     XA

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vim-switchtoinc 这是一款vim件,用于文件文件快速切换。注:在a.vim件基础上修改的。特性 支持多种语言(所有具备文件的语言),主要支持为c, cpp, objective-c, objective-cpp等 支持绝对路径进行查找 支持文件为基准的相对路径查找 支持regex替换路径 支持自定义项目目录,批量初始化目录后使用(推荐) 安装 可以直接克隆下来丢在vim件目录,但我推荐用件管理器进行管理,下面是各种件管理器:Pathogen git clone https://github.com/liwangmj/vim-switchtoinc.git ~/.vim/bundle/vim-switchtoinc vim-plug Plug 'liwangmj/vim-switchtoinc' NeoBundle NeoBundle 'liwangmj/vim-switchtoinc' Vundle Plugin 'liwangmj/vim-switchtoinc' 使用 切换到当前文件文件或则文件::A 同上,但在上面基础上会水平分栏进行打开::AV 打开当前文件文件文件,并会垂直分栏进行打开::AS 多个重名文件之间的切换::AN 初始化查找目录(只在用最后一种方式前使用,其他方法不用)::SearchIncAndSrcPath设置 需要设置文件文件的查找目录,通过 g:alternateSearchPath 来设置。 基于文件的相对路径查找(如下是默认值):let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc' 基于绝对路径查找(例子):let g:alternateSearchPath = 'abs:/home/my/myporject/inc,abs:/home/my/myproject/src' 基于vim正则表达式查找(例子):let g:alternateSerchPath = 'reg:/inc/src/g/, reg:/src/inc/g/' 以上方法都比较有局限性,因为只能针对单条路径(正则)或单个目录进行查找,下面的方法相对麻烦一点,但一劳永逸,不用担心可恶的目录问题: 先设置项目的根目录(例子): let g:iSearchProjectPath = '/home/my/myproject'let g:iSearchPathName = [            \'src', 'Src', 'SRC',            \'inc', 'Inc', 'INC',            \'source', 'Source', 'SOURCE',            \'include', 'Include', 'INCLUDE',            \'my_inc', 'my_inc'\] 再调用 SearchIncAndSrcPath 进行初始化查找目录: :SearchIncAndSrcPath 然后可以用:A :AV :AS 进行切换了。 最后说一下,最新版本更新: 第一次调用:A :AV :AS,件内部会自动执行一次 SearchIncAndSrcPath,只需直接切换即可,不用单独执行。 另外,如果在使用vim过程中相关文件目录有更改,可以通过执行一次SearchIncAndSrcPath来更新,但值得注意的是:之前打开过的文件切换信息由于存在缓存无法更新,需要重启vim才能生效! 推荐按键绑定autocmd FileType c,cpp,objc,objcpp nmap <silent> <F4> :wall<CR>:A<CR>autocmd FileType c,cpp,objc,objcpp nmap <silent> <C-F4> :wall<CR>:AV<CR>autocmd FileType c,cpp,objc,objcpp nmap <silent> <S-F4> :wall<CR>:AS<CR>autocmd FileType c,cpp,objc,objcpp nmap <silent> <Leader>an :wall<CR>:AN<CR>autocmd FileType c,cpp,objc,objcpp nmap <silent> <Leader>as :wall<CR>:SearchIncAndSrcPath<CR>谢谢 欢迎使用,祝使用愉快

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值