当前位置: 首页 > news >正文

Android拓展系列(8)--Vim插件便捷管理(使用git submodule和pathogen)

    对于一个vimer来说,vim插件的管理其实是一个问题。
    对于一个喜欢重装系统的vimer来说,vim插件的管理其实是一个很重要的问题。
    对于一个喜欢又喜欢尝鲜最新插件又喜欢重装系统的vimer来说,vim插件的管理其实是一个更重要的问题。
    所以,我想说的是,vim插件的管理,对于不同程度的人群有不同的重要性,我相信这真的是vimer要解决的一个重要的问题。

1. vim插件的管理的几个问题
    vim插件的管理到底是解决什么问题?
    (1). 记录存档;
        把你的个性化设置(.vimrc),使用的哪些插件,或者一些操作,或者自己整理的文档,能够有所记录存档,能够随时查阅。
    (2). 云备份;
        云备份相对于本地保存更安全,同时通过网络,我们能更方便在任何时间任何地点获取的到。
        重装系统,格式化,以后通通不怕忘记备份了。
    (3). 能更新;
        以最简单的方式,就能使用最新的插件,第一时间享受最新的改进。
    (4). 简单方便;
        只需要最简单的几部操作,就能在任何时间在任何电脑克隆出你电脑上一模一样的vim运行环境。
        绝对简单,绝对方便,这也是我们要追求的特性。

2. 使用git submodule和pathogen
    有一个解决方案,能解决上面提出的几个问题。
    插件的管理,有一个著名的vim插件pathogen能够实现方便的管理。
    备份记录,则可以使用git版本控制工具在github上实现。
    结合git中的submodule特性,我们能够实现插件的插件化,保持他们的独立性,进而实现插件的随时更新。

3. git和github
    这一步其实是本文的一个基础条件,也感谢github提供了这么一个好的大环境。
    git提供了版本管理,以便以后随时更新和修改。
    github相当于提供了云端的备份,随时随地都可以恢复,最主要的是对git的完美支持。
    结合git和github能够对本地插件和整个环境纳入一个良好的管理体系,简单强大,安全可靠。

4. 插件管理pathogen插件
    这个插件带来的好处就是,每个插件能够独立的放到bundle下对应的目录下,所有的插件很独立,很干净。
    pathogen的源码地址:https://github.com/tpope/vim-pathogen
    在上面详细讲述了pathogen的使用方法,我不累述。
    只是说明一下,这个插件式需要修改.vimrc的,所以后续我们需要提供一个.vimrc的更新方法,后面会说这个问题。

5. 使用git submodule
    git submodule实现把插件作为第三方版本库嵌入我们的版本库,而我们只需要付出管理一个版本库的精力。
    因为插件基本上都是别人提供了,而且现在vim scripts都迁移到了github上,我们只需要从github上clone下来就可以了。
    但是每个插件都是一个独立的版本库,如果简单的分开克隆,独立管理会造成本地也会有很多版本库。
    使用git submodule只需要建立一个版本库,而把这些插件的版本库只是当做这个版本库的子模块,这样既能实现管理的简单,有能分别进行独立的升级。
    git submodule的使用方法:

// 增加一个模块
git submodule add <url> <local path>
// 更新模块
git submodule init
git submodule update

6. 布局
    结合上述所说,我们给这个工程取名叫openvims为例,它的布局,也就是目录结构如下:

    前面提到的.vimrc的管理问题在这里通过Install.sh也解决了。

7. 验证
    我已经在github上搭建了这个工程,取名openvims,地址:
    https://github.com/openproject/openvims
    验证步骤如下:

// 首先,我们要做的就是clone成本地.vim目录
git clone https://github.com/openproject/openvims.git ~/.vim
// 其次, 更新各vim插件模块
git submodule init
git submodule update
// 最后,使用.vimrc
cd ~/.vim
./Install.sh

    两三步搞定了,现在你可以享受openvims带来的便利了。
    打开vim试试看,是不是有效果了。

8. 修改和升级
    修改文件,使用git常规方法提交,上传到服务器即可。
    如果要增加新的vim插件,使用如下命令:

// 以nerdtree为例,在.vim目录下执行
git submodule add https://github.com/scrooloose/nerdcommenter.git bundle/nerdcommenter

    如果更新插件的话,update即可

// 在.vim目录下
git submodule update

    如果删除目录的话,删除bundle下的插件的文件夹,然后手动修改.gitmodule,只能这样了,最后记得提交到服务器上去。

9.  几个插件说明
    (1).supertab
        这个插件是我的最爱,easy完成你的自动完成。
        装vim插件,我是第一个装这个插件(不算vim插件管理插件pathogen)
    (2).file-line
        很方便的一个小插件,让你直接打开文件并跳到某一行,你唯一要做的就是在文件参数后附加":number",number表示你的行数。
        应用场景:


        比如在某工程下使用jgrep查找Browser字符串,结果如下
        在316行有一个结果,安装此插件后,我们可以直接使用如下命令跳到316行:

vim ./src/com/android/mms/ui/MessageListItem.java:316

    (3).nerdtree
        树形工程浏览视图,很好用,效果如下图,这个插件的官方说明文档很详细,这里就不多说。


        针对工程用nerdtree打开的问题,我有个小小的经验之谈。
        (3.1).你可以使用vim +NERDTree就能快速以nerdtree打开当前目录
        (3.2).使用别名,快速在任何地方打开某一工程,举例:在.bashrc中定义alias openpro='cd /workspace/project; vim +NERDTree'后,在任何目录执行openpro就能打开workspace目录下的project这个工程了。
        (3.3).配置快捷键,比如F2等。
    (4).nerdcommenter
        快速注释的插件,习惯使用之后还真离不开这个插件了,"\" + "c" + " ",现在用的挺顺手的了。
    (5).tabular
        对齐插件,很方便。
        行选择,然后:Tabularize/=,则把所选行的=全部对齐。在写代码定义变量的时候还是经常用到的。
        不多说,截个图看看效果吧:


    (6).space
        使用空格重复插件,很聪明的一个插件,比.要强大,.只是重复上一个edit motion。
        小插件,用过之后相信你会喜欢的。
    后续有什么好用的插件,我会补充添加,也欢迎大家回复推荐一些好用的vim插件。

10. 小结
    vim的插件提供了强大的扩展,但是如同工具的Setting配置文件(不过更复杂一些),每类人总是有自定义的方案,并且希望把这个自定义的配置方案能够保存。
    对于vim插件,因为多而繁,又最好能够升级,本文提供了一个简单的方案,希望能帮助到一些vimer吧。

相关文章:

  • DHCP中继与vlan的隔离
  • poj 3041 Asteroids(二分图最小顶点覆盖)
  • linux下rsync+inotify实现文件时实同步
  • Windows批处理生成目录树
  • Linux中安装.rpm、.tar和.tar.gz或.tgz包
  • PHP Memcache(一):windows mencache安装
  • Linux内核Power Management配置注释
  • 惨痛的经历
  • Nagios监控原理
  • C# Execl图片插入
  • New Concept English 1 汇总
  • webservice-demo
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • 返回顶部的js实现
  • 将新添加硬盘划到根目录的方法(利用lvm)
  • 4. 路由到控制器 - Laravel从零开始教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Javascript设计模式学习之Observer(观察者)模式
  • Java反射-动态类加载和重新加载
  • Java小白进阶笔记(3)-初级面向对象
  • 闭包,sync使用细节
  • 技术:超级实用的电脑小技巧
  • 七牛云假注销小指南
  • 如何学习JavaEE,项目又该如何做?
  • 算法之不定期更新(一)(2018-04-12)
  • 微信开源mars源码分析1—上层samples分析
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 用quicker-worker.js轻松跑一个大数据遍历
  • raise 与 raise ... from 的区别
  • 仓管云——企业云erp功能有哪些?
  • 交换综合实验一
  • ​力扣解法汇总946-验证栈序列
  • (13)Hive调优——动态分区导致的小文件问题
  • (3)STL算法之搜索
  • (a /b)*c的值
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (动态规划)5. 最长回文子串 java解决
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (实战篇)如何缓存数据
  • (算法设计与分析)第一章算法概述-习题
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .md即markdown文件的基本常用编写语法
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 控制台应用程序读取配置文件app.config
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net framework profiles /.net framework 配置
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET企业级应用架构设计系列之开场白
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /var/lib/dpkg/lock 锁定问题
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [bzoj1038][ZJOI2008]瞭望塔