Vim技能修炼教程(1) - 使用vundle管理插件
世界上有两个伟大的编辑器:一个是emacs,一个是vi。它们从诞生以来,一直在Unix/Linux世界得到最广泛的支持。
尽管过了几十年,在Windows平台上和跨平台上有层出不穷的后起之秀不断挑战它们的地位,比如编辑器界的Sublime Text,Ultra Editor,Notepad++,pspad,Atom,Visual Studio Code,IDE界的Eclipse, IntellJ IDEA, NetBeans等等,但是它们的地位从未动摇过。
写C#的最好IDE一定是Visual Studio,写Java还是IntellJ IDEA和Eclipse更方便。但是,对于其它语言和其它任务,比起层出不穷的后来者,一定是emacs和vim的支持是最广泛的。针对一个特定的任务,可能Sublime Text和Atom只有区区几种插件选择甚至是没有,但是在vim和emacs上可以找到好多页。
这两种编辑器的学习曲线确实是相对比较陡的,但是,一旦修炼成功,这样的付出是绝对值得的。造成学习困难的主要原因,其实是功能太多太强大。这个修炼需要花不少的精力和时间,想修成上仙甚至上神是不容易的,但是,只要坚持下去,最终一定可以做到。好了,废话不多说了,我们开始修炼之旅。
修仙之前,我们先享受一下凡人的生活。我们先看看如何利用各位上仙上神做好的法器,也就是写好的脚本。
使用vundle管理插件
做为人类,我们先不研究上仙上神们是如何摆放脚本位置的,我们统一通过vundle来管理其余插件。
首先我们下载Vundle,通过git命令,非常简单:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
下面我们再通过修改~/.vimrc来配置一下,把下面原封不动抄到~/.vimrc就好:
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
我们只需要在call vundle#end()那一行之前,加上我们需要的plugin的内容就可以了。
下面我们开始vim plugin的寻宝之旅,第一站当然是官网!
vim插件宝库之官方网站
vim的第一集散地当然是官网:http://www.vim.org/scripts/index.php
比如我写C/C++比较多,我们就先拿c.vim来试试水。
官网上的插件的git库都放在这里:http://vim-scripts.org/vim/scripts.html
对于官网上的插件,我们直接使用vim-scripts.org上的目录名就好,比如c.vim,taglist.vim之类的,然后修改~/.vimrc文件:
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim
Plugin 'c.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
重启vim,让新的然后我们运行:PluginInstall命令,c.vim插件就被自动安装上了。
我们试验一下c.vim的强大功能吧,我们创建一个新的C++文件,比如test2.cpp,运行:
vim test2.cpp
打开之后,发生了什么?c.vim插件已经按照模板自动帮我们生成的文档头:
/*
* =====================================================================================
*
* Filename: test2.cpp
*
* Description:
*
* Version: 1.0
* Created: 2017/06/23 12时24分15秒
* Revision: none
* Compiler: gcc
*
* Author: YOUR NAME (),
* Organization:
*
* =====================================================================================
*/
#include <stdlib.h>
比如我们要写一个for循环,试试输入\i0,vim会提示输入一个变量名,我们就用i吧,于是就生成了这样的代码块:
for ( i = 0; i < n; i += 1 ) {
}
更多的好玩的快捷键功能,可以参考这个:https://wolfgangmehner.github.io/vim-plugins/csupport/c-hotkeys.pdf
更完整的功能,可以参考文档:https://wolfgangmehner.github.io/vim-plugins/doc/csupport.html
也可以通过:help csupport在vim中查看。
vim插件宝库之github
除了官网之外,github上也是vim插件的大型集散地。很多官网上的插件,在github上也有镜像。
vundle对于github的支持也是很好的,比如NERD tree的地址是:https://github.com/scrooloose/nerdtree,我们可以省略github地址,直接输用户名和库名就可以了,例:
Plugin 'scrooloose/nerdtree'
凡git库皆可支持
一般来说,官网和github上已经足够用了。但是,总是有一些特殊需求,比如公司内部使用之类的。这时候,我们只要附上git的地址就好,例:
Plugin 'git@gitlab.alibaba-inc.com:ziying.liuziying/studyvim.git'
本地目录
如果上面几种方式都不支持,比如是我们自己的写的插件,不想放到网上去,我们还可以指定本地目录的方式来使用插件。
例:
Plugin 'file:///home/gmarik/path/to/plugin'
Vundle简明手册
手动方式
就是将插件名写进.vimrc,然后通过:PluginInstall命令去安装
- PluginList命令:列出已经安装的插件。
下面是我安装的一些插件:
" My Plugins
Plugin 'VundleVim/Vundle.vim'
Plugin 'd.vim'
Plugin 'taglist.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'c.vim'
Plugin 'OmniCppComplete'
Plugin 'clang-complete'
Plugin 'AutoComplPop'
Plugin 'bufexplorer.zip'
Plugin 'SuperTab'
Plugin 'SrcExpl'
Plugin 'molokai'
Plugin 'omlet.vim'
Plugin 'cpp.vim'
Plugin 'thinca/vim-logcat'
Plugin 'vim-scripts/prop.vim'
Plugin 'mglb/vim-android-syntax'
PluginInstall命令:安装在.vimrc中指定的插件。如果要更新的话使用:PluginInstall! 或者:PluginUpdate命令
PluginClean:删除从.vimrc中删去的plugin
互动方式
:PluginSearch命令可以搜索字符串,搜索到之后,就可以直接点击i进行安装。
不过重启vim之后就没有了。希望每次启动后都有的话,还是写进.vimrc吧。
Vim技能修炼教程(1) - 使用vundle管理插件的更多相关文章
- Vim技能修炼教程(3) - 语法高亮进阶
语法高亮进阶 首先我们复习一下上节学到的三个命令: * syntax match用于定义正则表达式和规则的对应 * highlight default定义配色方案 * highlight link将正 ...
- Vim技能修炼教程(2) - 语法高亮速成
语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...
- Vim技能修炼教程(10) - 代码跳转
程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...
- Vim技能修炼教程(8) - 多窗口
多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...
- Vim技能修炼教程(4) - 基本功
基本功 前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能.现在,是时候回来补一补基本功了. Vi有三种主要模式,正常模式,插入模式和可视化模式.正常我们推荐的方 ...
- Vim技能修炼教程(17) - 编译自己的Vim
编译自己的Vim 前面我们已经对Vim有比较丰富的了解了.我们也知道Vim有很多编译时的选项,很多功能依赖于这些编译选项.其中最重要的就是脚本语言的支持,很多发行版本是不全的.为了支持我们所需要的功能 ...
- Vim技能修炼教程(16) - 浮点数计算函数
浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...
- Vim技能修炼教程(15) - 时间和日期相关函数
Vimscript武器库 前面我们走马观花地将Vimscript的大致语法过了一遍.下面我们开始深入看一下Vimscript都给我们准备了哪些武器.如果只用这些武器就够了,那么就太好了,只用Vimsc ...
- Vim技能修炼教程(14) - 写个ex命令吧
写个ex命令吧 我们第二节开始就写了语法高亮的插件.这一节,我们学习第二种插件的写法,就是写个我们自己的ex命令. 自定义ex命令的命令是:command,我们在~/.vim/下建立一个plugin目 ...
随机推荐
- 20145329《Java程序设计》第六周学习总结
教材学习内容总结 第十章 InputSream与OutputStream Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStr ...
- 《Java 程序设计》团队博客第十一周(第一次)
<Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...
- 通过Excel生成批量SQL语句
项目中有时会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert int ...
- Nagios监控mysql主从复制
因为公司的nagios用了很久监控项目很多,也在zabbix迁移中,也就先临时用nagios监控mysql主从了 mysql> show slave status\G 查看其输出,即可判定主从复 ...
- 【分类】AlexNet论文总结
目录 0. 论文链接 1. 概述 2. 对数据集的处理 3. 网络模型 3.1 ReLU Nonlinearity 3.2 Training on multiple GPUs 3.3 Local Re ...
- Git 设置 SOCKS 代理
$ export all_proxy=socks5://127.0.0.1:1080
- Mac 升级node与npm
第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node ...
- javaScript tips —— z-index 对事件机制的影响
demo // DOM结构 class App extends React.Component { componentDidMount() { const div1 = document.getEle ...
- JavaScript权威指南--语句
知识要点 在javascript中,表达式是短语,那么语句(statement)就是整句或命令.表达式计算出一个值,但语句用来执行以使某件事发生. 1.表达式语句 具有副作用的表达式是JavaScri ...
- angular $q的学习笔记转帖
http://blog.segmentfault.com/bornkiller/1190000000402555 angular $q的一个不错的学习笔记