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閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • macvim配置 最終效果如下: 系統環境 macos10.12.4 homebrew1.2.1 python3....
    Like_eb56閱讀 69,586評論 5 65
  • Ubuntu的發音 Ubuntu,源于非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意...
    螢火蟲de夢閱讀 99,430評論 9 467
  • 曾經在思科的工廠測試系統`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超過2年半,現在...
    戈多在地獄閱讀 1,808評論 1 13
  • 欣賞自己:今天是特種兵集訓第二天,感覺自己讀書都沒有那么努力用心過。女人就該是這樣,想要的東西自己努力賺錢買,不依...
    戰狼隊長閱讀 524評論 0 0
  • 河里纖水涸,岸上鬼燈暗。 一度春風里,三載入冬寒。 幾躇西城住,嘗踏彩云歸。 夜半聽鐘落,從此不楊帆。
    且廿四閱讀 276評論 0 1