Vim配置、插件和使用技巧

vim_cheat_sheet_for_programmers.png

常言道:工欲善其事,必先利其器 ,作为一个程序员,一个常用的工具就是编辑器,我选择一个能极大提高自己开发效率的编辑器vim(有些人可能选择emacs)。而vim编辑器方面具有以下几种特性:

  • 跨平台及统一环境
    无论是在windows还是在*nix,vim是一个很完美的跨平台文本编辑器,甚至可以直接在服务器平台CentOS,Ubuntu等直接配置使用,配置文件大同小异,操作习惯基本相同。

  • 定制化及可扩展
    vim提供一个vimrc的配置文件来配置vim,并且自己可以定制一些插件来实现文件浏览(NERD Tree),代码补全(YouCompleteMe,语法检查(syntastic),文件模糊搜索(ctrlp),显示vim状态栏(Vim Powerline),主题颜色(Molokai),显示文件结构(tagbar)等多种功能。

  • 高效命令行
    使用vim编辑文本,只需在键盘上操作就可以,根本无需用到鼠标。就拿光标移动来说,与重复击键、一个字符一个字符或一行一行移动相比,按一次键就能以词、行、块或函数为单位移动,效率高得多。有时一些重复删除、粘帖的操作,也只需一条命令就可以完成,甚至你可以用键映射来简化或组合多种命令来提高效率。

配置

如果你需要配置vim,只需在Home目录创建一个~/.vimrc文件即可以配置vim了,可以参考我的vimrc配置文件。由于我需要安装插件,并且将需要安装的插件列表分离到另外一个文件~/.vimrc.bundles,这个文件也是存放在Home目录,文件内容可以参考vimrc.bundles。若想加载~/.vimrc.bundles文件,必须在~/.vimrc文件加入以下代码片段:

if filereadable(expand("~/.vimrc.bundles"))
  source ~/.vimrc.bundles
endif

插件

插件管理工具vunble

vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。

  1. Home目录创建~/.vim目录和.vimrc文件(可复制我的vimrc文件)
  2. 安装vundle
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

  1. 在.vimrc配置文件中添加vundle支持
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

但实际上我是添加一个~/.vimrc.bundles文件来保存所有插件的配置,必须在~/.vimrc文件加入以下代码片段:

if filereadable(expand("~/.vimrc.bundles"))
  source ~/.vimrc.bundles
endif

~/.vimrc.bundles文件内容必须包含:

 filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

你可以复制到我~/.vimrc.bundles文件到Home目录。

安装插件

bundle分为三类,比较常用就是第二种

  1. 在Github vim-scripts 用户下的repos,只需要写出repos名称
  2. 在Github其他用户下的repos, 需要写出”用户名/repos名”
  3. 不在Github上的插件,需要写出git全路径

Bundle Type.png

将安装的插件在~/.vimrc配置,但是我是将插件配置信息放在~/.vimrc.bundles

" Define bundles via Github repos
Bundle 'christoomey/vim-run-interactive'
Bundle 'Valloric/YouCompleteMe'
Bundle 'croaky/vim-colors-github'
Bundle 'danro/rename.vim'
Bundle 'majutsushi/tagbar'
Bundle 'kchmck/vim-coffee-script'
Bundle 'kien/ctrlp.vim'
Bundle 'pbrisbin/vim-mkdir'
Bundle 'scrooloose/syntastic'
Bundle 'slim-template/vim-slim'
Bundle 'thoughtbot/vim-rspec'
Bundle 'tpope/vim-bundler'
Bundle 'tpope/vim-endwise'
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-surround'
Bundle 'vim-ruby/vim-ruby'
Bundle 'vim-scripts/ctags.vim'
Bundle 'vim-scripts/matchit.zip'
Bundle 'vim-scripts/tComment'
Bundle "mattn/emmet-vim"
Bundle "scrooloose/nerdtree"
Bundle "Lokaltog/vim-powerline"
Bundle "godlygeek/tabular"
Bundle "msanders/snipmate.vim"
Bundle "jelera/vim-javascript-syntax"
Bundle "altercation/vim-colors-solarized"
Bundle "othree/html5.vim"
Bundle "xsbeats/vim-blade"
Bundle "Raimondi/delimitMate"
Bundle "groenewege/vim-less"
Bundle "evanmiller/nginx-vim-syntax"
Bundle "Lokaltog/vim-easymotion"
Bundle "tomasr/molokai"
Bundle "klen/python-mode"

打开vim,运行:BundleInstall或在shell中直接运行vim +BundleInstall +qall

Install Bundle.png

安装完插件之后,可能还有一个问题:就是vim版本不够高

Vim版本不够高.png

可以使用以下命令更新vim版本

brew install macvim --override-system-vim

然后运行以下命令符号连接到/Application

brew linkapps macvim

最后在.zshrc配置文件中使用别名来使用更新后的vim

#setup macvim alias
alias vim='/usr/local/opt/macvim/MacVim.app/Contents/MacOS/Vim'

常用插件

NERD Tree

NERD Tree是一个树形目录插件,方便浏览当前目录有哪些目录和文件。

NERD Tree Plugin Bundle.png

我在~/.vimrc文件中配置NERD Tree,设置一个启用或禁用NERD Tree的键映射

nmap <F5> :NERDTreeToggle<cr>

NERD Tree Configuration.png

所以你只需按F5键就能启用或禁用NERD Tree,NERD Tree提供一些常用快捷键来操作目录:

  • 通过hjkl来移动光标
  • o打开关闭文件或目录,如果想打开文件,必须光标移动到文件名
  • t在标签页中打开
  • si可以水平或纵向分割窗口打开文件
  • p到上层目录
  • P到根目录
  • K到同目录第一个节点
  • P到同目录最后一个节点
YouCompleteMe & syntastic

YouCompleteMe是一个快速、支持模糊匹配的vim代码补全引擎。由于它是基于Clang引擎为C/C++/Objective-C提供代码提示,也支持其他语言代码提示的引擎,例如基于Jedi的Python代码补全,基于OmniSharp的C#代码补全,基于Gocode的Go代码补全。

YouCompleteMe.gif

只需敲入代码,就自动提示想输入的代码列表,你可以选择其中一个,然后tab键就可以补全代码。

YouCompleteMe已经集成了Syntastic,所以一旦你编写代码时语法错误,就会有红色错误提示

syntastic.png
ctrlp

不知道你有没有遇到这样一种情况:在大规模的工程项目中,目录和文件嵌套比较深,打开一个文件要逐个逐个进入目录才能打开,这样的话,比较耗时间和效率很低,ctrlp重新定义打目录和文件方式,特别适用于大规模项目文件的浏览。

启用ctrlp

  • 运行命令:CtrlP:CtrlP [starting-directory]来以查找文件模式来启用** ctrlp**
  • 运行命令:CtrlPBuffer:CtrlPMRU来以查找缓冲或最近打开文件模式来启用ctrlp
  • 运行命令CtrlPMixed来查找文件、查找缓冲和最近打开文件混合模式来启动** ctrlp**

基本使用

  • <c-f><c-b>在三种查找模式中互相切换
  • <c-y>来创建新文件和对应的父目录
  • <c-d>来切换到只查找文件名而不是全路径
  • <c-j><c-k>或箭头方向键来移动查找结果列表
  • <c-t><c-v><c-x>来以新标签或分割窗口的方式来打开文件
  • <c-z>来标识或取消标识文件,然后按<c-o>来打开文件
  • <c-n><c-p>来在提示历史中选择下一个/上一个字符串

演示视频
具体如何使用ctrlp,请参考happypetterd的演示视频,讲解非常清楚。

Vim Powerline

Vim Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息

Vim Powerline.png
Molokai

Molokai是vim颜色主题,效果如下

Molokai Color Scheme for Vim.png

常用命令

对于入门vim基本命令可以参考 简明 Vim 练级攻略,以下是本人关于移动光标插入/修改删除复制粘帖撤销和恢复等常用命令

  • 移动光标
  1. 对于在行内移动,通过使用f/F + 字符来移动到特定的字符,然后再使用. 来重复执行命令;f表示向前移动,F表示向后移动。如果想直接移动到行首或行尾,使用^$
  2. 对于在多行移动,就有多种选择:第一种是通过ggG行数 + G指定行数来移动,gg表示移动文件的第一行,G表示移动文件的最后一行,行数 + G表示移动到特定的行。第二种就是通过正则搜索的方式来移动,/string表示正向查找,?string表示反向查找,n查找下一个匹配的结果,N表示上一个匹配的结果,按up/down可以浏览搜索历史。第三种就是使用标记来移动,m + {a-z}标记位置(适用于单个文件,如果是多个文件,使用大写字母{A-Z}),``{mark}移动到标记位置的列,'{mark}移动到标记位置的行首,还有一些特殊的标记,'`表示跳转前光标的位置
  • 选择文本
    v不规则选择
    V按行选择
    Ctrl + V按列选择

  • 插入/修改
    i在当前字符前面插入
    I在行首插入
    a在当前字符后面插入
    A在行尾插入
    o在当前行的下一行插入
    O在当前行的上一行插入

r更改当前的字符
R更改多个字符
cw/caw更改单词
cf + 字符更改从当前字符到指定字符
c$更改从当前字符到行尾
cc更改整行

  • 删除
    x删除字符
    df + 字符删除从当前字符到指定字符
    dw/daw删除单词
    d$删除从当前光标到行尾
    dd删除一行

  • 剪切与粘帖
    dd + pdelete一行,然后放在当前光标下方
    dd + Pdelete一行,然后放在当前光标上方
    dw + p delete单词,然后放在当前光标后面
    dw + P delete单词,然后放在当前光标前面
    p/P可接受计数前缀,重复粘贴

  • 复制
    yw复制单词
    yf复制从当前字符到指定字符
    y$复制当前光标到行尾
    yy复制整行

  • 撤销和恢复
    u撤销
    ctrl + r重做

  • 重复操作
    数字+action表示执行某个操作多少次
    .重复上一个操作

  • 宏录制
    q + 寄存器(a-z)开始录制
    录制动作
    q停止录制
    @ + 寄存器 / @@replay被录制的宏

扩展阅读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • macvim配置 最终效果如下: 系统环境 macos10.12.4 homebrew1.2.1 python3....
    Like_eb56阅读 69,244评论 5 65
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,119评论 9 467
  • 曾经在思科的工厂测试系统`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超过2年半,现在...
    戈多在地狱阅读 1,783评论 1 13
  • 欣赏自己:今天是特种兵集训第二天,感觉自己读书都没有那么努力用心过。女人就该是这样,想要的东西自己努力赚钱买,不依...
    战狼队长阅读 499评论 0 0
  • 河里纤水涸,岸上鬼灯暗。 一度春风里,三载入冬寒。 几躇西城住,尝踏彩云归。 夜半听钟落,从此不杨帆。
    且廿四阅读 208评论 0 1