
常言道:工欲善其事,必先利其器 ,作為一個(gè)程序員,一個(gè)常用的工具就是編輯器,我選擇一個(gè)能極大提高自己開發(fā)效率的編輯器vim(有些人可能選擇emacs)。而vim編輯器方面具有以下幾種特性:
跨平臺(tái)及統(tǒng)一環(huán)境
無論是在windows還是在*nix,vim是一個(gè)很完美的跨平臺(tái)文本編輯器,甚至可以直接在服務(wù)器平臺(tái)CentOS,Ubuntu等直接配置使用,配置文件大同小異,操作習(xí)慣基本相同。定制化及可擴(kuò)展
vim提供一個(gè)vimrc的配置文件來配置vim,并且自己可以定制一些插件來實(shí)現(xiàn)文件瀏覽(NERD Tree),代碼補(bǔ)全(YouCompleteMe,語法檢查(syntastic),文件模糊搜索(ctrlp),顯示vim狀態(tài)欄(Vim Powerline),主題顏色(Molokai),顯示文件結(jié)構(gòu)(tagbar)等多種功能。高效命令行
使用vim編輯文本,只需在鍵盤上操作就可以,根本無需用到鼠標(biāo)。就拿光標(biāo)移動(dòng)來說,與重復(fù)擊鍵、一個(gè)字符一個(gè)字符或一行一行移動(dòng)相比,按一次鍵就能以詞、行、塊或函數(shù)為單位移動(dòng),效率高得多。有時(shí)一些重復(fù)刪除、粘帖的操作,也只需一條命令就可以完成,甚至你可以用鍵映射來簡化或組合多種命令來提高效率。
配置
如果你需要配置vim,只需在Home目錄創(chuàng)建一個(gè)~/.vimrc文件即可以配置vim了,可以參考我的vimrc配置文件。由于我需要安裝插件,并且將需要安裝的插件列表分離到另外一個(gè)文件~/.vimrc.bundles,這個(gè)文件也是存放在Home目錄,文件內(nèi)容可以參考vimrc.bundles。若想加載~/.vimrc.bundles文件,必須在~/.vimrc文件加入以下代碼片段:
if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif
插件
插件管理工具vunble
vundle是vim的插件管理工具,它能夠搜索、安裝、更新和移除vim插件,再也不需要手動(dòng)管理vim插件。
- 在Home目錄創(chuàng)建~/.vim目錄和.vimrc文件(可復(fù)制我的vimrc文件)
- 安裝vundle
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
- 在.vimrc配置文件中添加vundle支持
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
但實(shí)際上我是添加一個(gè)~/.vimrc.bundles文件來保存所有插件的配置,必須在~/.vimrc文件加入以下代碼片段:
if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif
而~/.vimrc.bundles文件內(nèi)容必須包含:
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
你可以復(fù)制到我~/.vimrc.bundles文件到Home目錄。
安裝插件
bundle分為三類,比較常用就是第二種:
- 在Github vim-scripts 用戶下的repos,只需要寫出repos名稱
- 在Github其他用戶下的repos, 需要寫出”用戶名/repos名”
- 不在Github上的插件,需要寫出git全路徑

將安裝的插件在~/.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,運(yùn)行:BundleInstall或在shell中直接運(yùn)行vim +BundleInstall +qall

安裝完插件之后,可能還有一個(gè)問題:就是vim版本不夠高

可以使用以下命令更新vim版本
brew install macvim --override-system-vim
然后運(yùn)行以下命令符號(hào)連接到/Application
brew linkapps macvim
最后在.zshrc配置文件中使用別名來使用更新后的vim
#setup macvim alias
alias vim='/usr/local/opt/macvim/MacVim.app/Contents/MacOS/Vim'
常用插件
NERD Tree
NERD Tree是一個(gè)樹形目錄插件,方便瀏覽當(dāng)前目錄有哪些目錄和文件。

我在~/.vimrc文件中配置NERD Tree,設(shè)置一個(gè)啟用或禁用NERD Tree的鍵映射
nmap <F5> :NERDTreeToggle<cr>

所以你只需按F5鍵就能啟用或禁用NERD Tree,NERD Tree提供一些常用快捷鍵來操作目錄:
- 通過hjkl來移動(dòng)光標(biāo)
- o打開關(guān)閉文件或目錄,如果想打開文件,必須光標(biāo)移動(dòng)到文件名
- t在標(biāo)簽頁中打開
- s和i可以水平或縱向分割窗口打開文件
- p到上層目錄
- P到根目錄
- K到同目錄第一個(gè)節(jié)點(diǎn)
- P到同目錄最后一個(gè)節(jié)點(diǎn)
YouCompleteMe & syntastic
YouCompleteMe是一個(gè)快速、支持模糊匹配的vim代碼補(bǔ)全引擎。由于它是基于Clang引擎為C/C++/Objective-C提供代碼提示,也支持其他語言代碼提示的引擎,例如基于Jedi的Python代碼補(bǔ)全,基于OmniSharp的C#代碼補(bǔ)全,基于Gocode的Go代碼補(bǔ)全。

只需敲入代碼,就自動(dòng)提示想輸入的代碼列表,你可以選擇其中一個(gè),然后tab鍵就可以補(bǔ)全代碼。
YouCompleteMe已經(jīng)集成了Syntastic,所以一旦你編寫代碼時(shí)語法錯(cuò)誤,就會(huì)有紅色錯(cuò)誤提示

ctrlp
不知道你有沒有遇到這樣一種情況:在大規(guī)模的工程項(xiàng)目中,目錄和文件嵌套比較深,打開一個(gè)文件要逐個(gè)逐個(gè)進(jìn)入目錄才能打開,這樣的話,比較耗時(shí)間和效率很低,ctrlp重新定義打目錄和文件方式,特別適用于大規(guī)模項(xiàng)目文件的瀏覽。
啟用ctrlp
- 運(yùn)行命令
:CtrlP或:CtrlP [starting-directory]來以查找文件模式來啟用** ctrlp** - 運(yùn)行命令
:CtrlPBuffer或:CtrlPMRU來以查找緩沖或最近打開文件模式來啟用ctrlp - 運(yùn)行命令
CtrlPMixed來查找文件、查找緩沖和最近打開文件混合模式來啟動(dòng)** ctrlp**
基本使用
- 按
<c-f>和<c-b>在三種查找模式中互相切換 - 按
<c-y>來創(chuàng)建新文件和對應(yīng)的父目錄 - 按
<c-d>來切換到只查找文件名而不是全路徑 - 按
<c-j>,<c-k>或箭頭方向鍵來移動(dòng)查找結(jié)果列表 - 按
<c-t>或<c-v>,<c-x>來以新標(biāo)簽或分割窗口的方式來打開文件 - 按
<c-z>來標(biāo)識(shí)或取消標(biāo)識(shí)文件,然后按<c-o>來打開文件 - 按
<c-n>,<c-p>來在提示歷史中選擇下一個(gè)/上一個(gè)字符串
演示視頻
具體如何使用ctrlp,請參考happypetterd的演示視頻,講解非常清楚。
Vim Powerline
Vim Powerline是一個(gè)顯示vim狀態(tài)欄插件,它能夠顯示vim模式、操作環(huán)境、編碼格式、行數(shù)/列數(shù)等信息

Molokai
Molokai是vim顏色主題,效果如下

常用命令
對于入門vim基本命令可以參考 簡明 Vim 練級攻略,以下是本人關(guān)于移動(dòng)光標(biāo)、插入/修改、刪除、復(fù)制、粘帖、撤銷和恢復(fù)等常用命令
- 移動(dòng)光標(biāo)
- 對于在行內(nèi)移動(dòng),通過使用
f/F + 字符來移動(dòng)到特定的字符,然后再使用.來重復(fù)執(zhí)行命令;f表示向前移動(dòng),F表示向后移動(dòng)。如果想直接移動(dòng)到行首或行尾,使用^或$ - 對于在多行移動(dòng),就有多種選擇:第一種是通過
gg,G,行數(shù) + G指定行數(shù)來移動(dòng),gg表示移動(dòng)文件的第一行,G表示移動(dòng)文件的最后一行,行數(shù) + G表示移動(dòng)到特定的行。第二種就是通過正則搜索的方式來移動(dòng),/string表示正向查找,?string表示反向查找,n查找下一個(gè)匹配的結(jié)果,N表示上一個(gè)匹配的結(jié)果,按up/down可以瀏覽搜索歷史。第三種就是使用標(biāo)記來移動(dòng),m + {a-z}標(biāo)記位置(適用于單個(gè)文件,如果是多個(gè)文件,使用大寫字母{A-Z}),``{mark}移動(dòng)到標(biāo)記位置的列,'{mark}移動(dòng)到標(biāo)記位置的行首,還有一些特殊的標(biāo)記,'`表示跳轉(zhuǎn)前光標(biāo)的位置
選擇文本
v不規(guī)則選擇
V按行選擇
Ctrl + V按列選擇插入/修改
i在當(dāng)前字符前面插入
I在行首插入
a在當(dāng)前字符后面插入
A在行尾插入
o在當(dāng)前行的下一行插入
O在當(dāng)前行的上一行插入
r更改當(dāng)前的字符
R更改多個(gè)字符
cw/caw更改單詞
cf + 字符更改從當(dāng)前字符到指定字符
c$更改從當(dāng)前字符到行尾
cc更改整行
刪除
x刪除字符
df + 字符刪除從當(dāng)前字符到指定字符
dw/daw刪除單詞
d$刪除從當(dāng)前光標(biāo)到行尾
dd刪除一行剪切與粘帖
dd + pdelete一行,然后放在當(dāng)前光標(biāo)下方
dd + Pdelete一行,然后放在當(dāng)前光標(biāo)上方
dw + pdelete單詞,然后放在當(dāng)前光標(biāo)后面
dw + Pdelete單詞,然后放在當(dāng)前光標(biāo)前面
p/P可接受計(jì)數(shù)前綴,重復(fù)粘貼復(fù)制
yw復(fù)制單詞
yf復(fù)制從當(dāng)前字符到指定字符
y$復(fù)制當(dāng)前光標(biāo)到行尾
yy復(fù)制整行撤銷和恢復(fù)
u撤銷
ctrl + r重做重復(fù)操作
數(shù)字+action表示執(zhí)行某個(gè)操作多少次
.重復(fù)上一個(gè)操作宏錄制
q + 寄存器(a-z)開始錄制
錄制動(dòng)作
q停止錄制
@ + 寄存器 / @@replay被錄制的宏