mac下配置vim

macvim配置

最終效果如下:

系統(tǒng)環(huán)境

  • macos10.12.4
  • homebrew1.2.1
  • python3.5&python2.7
  • iTerm2
  • zsh5.3.1
  • macvim8.0

安裝macvim

mac預(yù)裝了vim,但官方的 vim 在 Mac 上只有一個很不完善的,長期沒人維護(hù)的 Carbon 圖形用戶界面。macvim 主要是在此基礎(chǔ)上添加了一個完整的 Cocoa 用戶界面罩旋,其核心部分和 vim 同步基括。MacVim 采用了分離進(jìn)程的方式艾君,一個 MacVim 程序可以啟動多個 vim 進(jìn)程归园,每個顯示在一個 MacVim 窗口中停团,這是官方的 vim 和其他平臺下的 gvim 所不支持的亭枷。MacVim 還支持很多 Mac OS X 原生的界面特性袭艺,比如工具欄、滾動條叨粘、全屏顯示猾编、Mac 菜單快捷鍵的綁定等。

# 查看預(yù)裝vim版本
vim --version

# 查看預(yù)裝vim路徑
where vim

安裝

有兩種方式來安裝macvim:

  1. Github上下載macvim.dmg安裝包進(jìn)行安裝
  2. 使用Homebrew安裝

這也是我們所采用的方式:

brew install macvim

建立軟鏈接

無論使用哪種方式進(jìn)行安裝升敲,可以在MacVim.app包文件中找到mvim和vim的可執(zhí)行文件答倡,要在shell中方便的執(zhí)行這些命令,可以:

  1. 將可執(zhí)行文件所在路徑添加到環(huán)境變量$PATH
  2. 將可執(zhí)行文件復(fù)制到環(huán)境變量$PATH中的某一個路徑下驴党;
  3. $PATH中的某一個路徑下創(chuàng)建該可執(zhí)行文件的軟/硬鏈接瘪撇;
  4. 為可執(zhí)行文件設(shè)置別名,并添加到配置文件中(/.bash_profile或/.zshrc)港庄;

這里推薦在/usr/local/bin目錄下為mvim軟鏈接的方式倔既。同時,mac預(yù)裝vim版本過低鹏氧,推薦使用MacVim.app包中的vim將其替代,如果想同時保留原來預(yù)裝的/usr/bin/vim中的vim渤涌,可以通過創(chuàng)建別名來將其“覆蓋”掉。

# 將可執(zhí)行文件所在路徑添加到環(huán)境變量`$PATH`中把还,單引號內(nèi)的字符會原樣輸出
echo 'export PATH=/usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/bin:$PATH' >> ~/.zshrc

# 或?qū)⒖蓤?zhí)行文件mvim復(fù)制到/usr/local/bin/路徑下
cp /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/bin/mvim /usr/local/bin/mvim

# 或者在/usr/local/bin/路徑中為mvim建立軟鏈接
ln -s /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/bin/mvim /usr/local/bin/mvim

# 為macvim中的vim創(chuàng)建別名歼捏,將其添加至~/.zshrc配置文件
echo 'alias vim="/usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/MacOS/vim"' >> ~/.zshrc
# 重新加載.zshrc以使修改生效 
source ~/.zshrc

安裝驗證

終端輸入vim,終端vim顯示如下:

終端輸入mvim笨篷,彈出GUIvim如下:

配置文件

在vim啟動過程中,首先將查找配置文件并執(zhí)行其中的命令瓣履,而這些初始化文件一般有vimrc率翅、gvimrc和exrc三種。通過:version命令可以查看vim的配置文件信息:

:version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled May  8 2017 19:26:04)
MacOS X (unix) version
Included patches: 1-596
Compiled by Homebrew
......
 system vimrc file: "$VIM/vimrc"       # 全局vimrc配置文件
     user vimrc file: "$HOME/.vimrc"   # 用戶vimrc配置文件
 2nd user vimrc file: "~/.vim/vimrc"       # 備用用戶vimrc配置文件
      user exrc file: "$HOME/.exrc"    # 向后兼容vi的用戶配置文件
  system gvimrc file: "$VIM/gvimrc"    # 全局gvimrc配置文件
    user gvimrc file: "$HOME/.gvimrc"   # 局部gvimrc配置文件
2nd user gvimrc file: "~/.vim/gvimrc"   # 備用局部gvimrc配置文件
       defaults file: "$VIMRUNTIME/defaults.vim"
 system menu file: "$VIMRUNTIME/menu.vim"  # MacVim的菜單文件的路徑
  fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"      # 系統(tǒng)變量VIM路徑

配置文件的位置

vim的配置文件有全局和用戶兩種版本袖迎,分別存放于$VIM$HOME目錄中冕臭,用戶配置文件默認(rèn)是沒有的腺晾,必要時由用戶自己在$HOME目錄下創(chuàng)建」脊螅可以使用:echo命令查看他們的路徑悯蝉,使用:e命令進(jìn)入目錄:

:echo $VIM
/usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim

:echo $HOME
/Users/Garsen
  1. vimrc是vim最常用的配置文件
  2. gvim是Gvim的配置文件
  3. exrc僅用于向后兼容olvi/ex;除非你使用vi-compatible模式托慨,否則不需要關(guān)注exrc配置文件

配置文件的加載順序

可以通過:scriptname查看各腳本的加載順序:

  1: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/vimrc
  2: ~/.vimrc
  3: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/syntax/syntax.vim
  4: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/syntax/synload.vim
  5: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/syntax/syncolor.vim
  6: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/filetype.vim
  7: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/menu.vim
  8: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/autoload/paste.vim
  9: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/runtime/ftoff.vim
 10: ~/.vim/bundle/Vundle.vim/autoload/vundle.vim    
  ......
 85: /usr/local/Cellar/macvim/8.0-133/MacVim.app/Contents/Resources/vim/gvimrc
 86: ~/.gvimrc    
  ......

可以看到:macvim在啟動時會依次加載全局vimrc>>用戶.vimrc>>全局gvimrc>>用戶.gvimrc鼻由,而終端vim在啟動既不加載gvimrc也不加載.gvimrc也就是說:

  1. 用戶配置文件中的配置會覆蓋全局配置文件的配置;因此厚棵,我們可以通過創(chuàng)建~/.vimrc來修改vim的默認(rèn)配置蕉世。
  2. 對GUIvim,gvimrc會覆蓋vimrc中的配置婆硬;因此狠轻,我們可以通過創(chuàng)建~/.vimrc使終端vim和GUIvim擁有不同的配置。此外彬犯,GUIvim支持更多擴(kuò)展向楼,有些功能在終端vim中無法使用。

創(chuàng)建用戶配置文件

# 切換至用戶目錄
cd ~
# 使用mvim創(chuàng)建并打開.vimrc
mvim .vimrc

編輯配置文件

可以使用以下命令谐区,新建緩沖區(qū)來編輯配置文件:
:edit $MYVIMRC
也可以使用以下命令湖蜕,新建標(biāo)簽頁來編輯配置文件:
:tabedit $MYVIMRC

當(dāng)然也可以使用任何其他文本編輯器打開配置文件進(jìn)行編輯。

應(yīng)用配置文件

修改配置文件后卢佣,需要重新啟動Vim重荠,或使用:source命令來應(yīng)用新的設(shè)置:

:source $MYVIMRC

我們可以在配置文件中增加以下命令,在保存后自動應(yīng)用配置:

autocmd bufwritepost .vimrc source $MYVIMRC

配置文件基本配置

顯示中文幫助

  1. 下載vimdoc
  2. 將文件解壓到~/.vim/doc虚茶,若路徑不存在則自己創(chuàng)建
  3. 打開vim執(zhí)行:helptags ~/.vim/doc
  4. 在~/.vimrc中進(jìn)行配置:
set helplang=cn 
if version >= 603
    set helplang=cn
    set encoding=utf-8
endif

保存配置文件后自動應(yīng)用配置

:com[mand][!] [{attr}...] {cmd} {rep}
定義一個用戶命令,命令的名字是 {cmd}戈鲁,而替換的文本是{rep}。該命令的屬性 (參考下面) 是 {attr}嘹叫。如果該命令已存在婆殿,會報錯,除非已經(jīng)指定了一個!罩扇,這種情況下命令被重定義婆芦。

BufWritePost是一個自動命令事件BufWritePost <filename> <command>把整個緩沖區(qū)寫回到文件后(即修改并保存.vimrc之后)喂饥,自動執(zhí)行source $MYVIMRC以使配置生效消约。

autocmd! BufWritePost $MYVIMRC source $MYVIMRC

設(shè)置字體

設(shè)置格式:set guifont=字體名:h字號

  • 只要能在“字體冊”中找到的字體都可以使用,可以自己下載安裝喜歡的字體
  • 如果字體名中包含空格,需使用\進(jìn)行轉(zhuǎn)義员帮;
  • 如果要使用powerline主題或粮,則將字體設(shè)置為poerline類字體效果最好;
set guifont=Meslo\ LG\ S\ DZ\ Regular\ for\ Powerline:h13

字符編碼

enc,fenc,fencs,tenc,一般亂碼多是因這些參數(shù)設(shè)置不正確引起:

  1. enc捞高,vim內(nèi)部使用的編碼氯材,如buffer渣锦,寄存器中的字符串,windows一般是gbk氢哮,mac是utf-8
  2. fenc袋毙,當(dāng)前打開文件自身的編碼,如果enc和fenc不一致冗尤,vim會做編碼轉(zhuǎn)換听盖,轉(zhuǎn)換成fenc編碼保存文件
  3. fencs,一個字符編碼列表生闲,編碼的自動識別就是通過它實現(xiàn)的
  4. tenc媳溺,終端使用的編碼,或者說vim用于屏幕顯示時的編碼碍讯,顯示時vim會把內(nèi)部編碼轉(zhuǎn)換為屏幕編碼進(jìn)行輸出悬蔽,默認(rèn)為enc
mac和linux系統(tǒng)將enc設(shè)置為utf-8
set enc=utf-8

其他項

其他基本設(shè)置如下,注釋清晰捉兴,不再一一說明:

" 設(shè)置外觀 -------------------------------------
set number                      "顯示行號 
set showtabline=0               "隱藏頂部標(biāo)簽欄"
set guioptions-=r               "隱藏右側(cè)滾動條" 
set guioptions-=L               "隱藏左側(cè)滾動條"
set guioptions-=b               "隱藏底部滾動條"
set cursorline                  "突出顯示當(dāng)前行"
set cursorcolumn                "突出顯示當(dāng)前列"
set langmenu=zh_CN.UTF-8        "顯示中文菜單
" 變成輔助 -------------------------------------
syntax on                           "開啟語法高亮
set nowrap                      "設(shè)置代碼不折行"
set fileformat=unix             "設(shè)置以unix的格式保存文件"
set cindent                     "設(shè)置C樣式的縮進(jìn)格式"
set tabstop=4                   "一個 tab 顯示出來是多少個空格蝎困,默認(rèn) 8
set shiftwidth=4                "每一級縮進(jìn)是多少個空格
set backspace+=indent,eol,start "set backspace&可以對其重置
set showmatch                   "顯示匹配的括號"
set scrolloff=5                 "距離頂部和底部5行"
set laststatus=2                "命令行為兩行"
" 其他雜項 -------------------------------------
set mouse=a                     "啟用鼠標(biāo)"
set selection=exclusive
set selectmode=mouse,key
set matchtime=5
set ignorecase                  "忽略大小寫"
set incsearch
set hlsearch                    "高亮搜索項"
set noexpandtab                 "不允許擴(kuò)展table"
set whichwrap+=<,>,h,l
set autoread

安裝vim插件管理器——Vundle

Vim本身能夠滿足開發(fā)人員的很多需求,但是它的可擴(kuò)展性也極強(qiáng)倍啥,并且已經(jīng)有一些殺手級的擴(kuò)展禾乘,可以讓Vim擁有“現(xiàn)代”集成開發(fā)環(huán)境的特性。所以虽缕,你所需要的第一件東西就是一個好用的擴(kuò)展管理器始藕。

雖說有其他很多方式對vim進(jìn)行擴(kuò)展,Vim也有多個插件管理器氮趋,但是我們強(qiáng)烈推薦Vundle伍派,它能夠搜索、安裝剩胁、更新和移除vim插件诉植,再也不需要手動管理vim插件,你可以把它想象成Vim的pip昵观。有了Vundle晾腔,安裝和更新包這種事情不費(fèi)吹灰之力。

安裝Vundle

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

該命令將下載Vundle插件管理器啊犬,并將它放置在你的Vim編輯器bundles文件夾中∽评蓿現(xiàn)在,你可以通過.vimrc配置文件來管理所有擴(kuò)展了觉至。

配置Vundle

接下來將Vundle配置添加到配置文件的頂部:

set nocompatible              " 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 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)


" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

使用Vundle
這樣缤至,你就完成了使用Vundle前的設(shè)置。之后,安裝vim插件的一般步驟可歸結(jié)為:

  1. 在配置文件.vimrc中领斥,將希望安裝的插件寫入call vundle#begin()call vundle#end()行之間:Plugin '插件名'
  2. 然后打開Vim編輯器,運(yùn)行下面的命令::PluginInstall沃暗,Vundle就會自動下載安裝對應(yīng)的插件
  3. 在.vimrc中對插件進(jìn)一步做詳細(xì)配置

執(zhí)行:PluginInstall后的截圖:

安裝插件——打造IDE

或許月洛,Vim編輯器最重要的功能就是它不要求使用鼠標(biāo)(除了GUI版本外)。一開始孽锥,你可能會覺得這是個非常糟糕的做法嚼黔,但是只要你投入時間——是的,這很花時間——學(xué)習(xí)快捷組合鍵惜辑,就可以大幅提升工作流的速度唬涧。

添加目錄樹——NERDTree

NERDTree的作用就是列出當(dāng)前路徑的目錄樹,一般IDE都是有的盛撑∷榻冢可以方便的瀏覽項目的總體的目錄結(jié)構(gòu)和創(chuàng)建刪除重命名文件或文件名。

安裝NERDTree

添加目錄樹:nerdtree

Plugin 'scrooloose/nerdtree'  

添加git狀態(tài)圖標(biāo):nerdtree-git

Plugin 'Xuyuanp/nerdtree-git-plugin'  

配置NERDTree

"使用F3鍵快速調(diào)出和隱藏它
map <F3> :NERDTreeToggle<CR>

let NERDTreeChDirMode=1

"顯示書簽"
let NERDTreeShowBookmarks=1

"設(shè)置忽略文件類型"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']

"窗口大小"
let NERDTreeWinSize=25

" 修改默認(rèn)箭頭
let g:NERDTreeDirArrowExpandable = '?'
let g:NERDTreeDirArrowCollapsible = '?'

"How can I open a NERDTree automatically when vim starts up if no files were specified?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif

" 打開vim時自動打開NERDTree
autocmd vimenter * NERDTree           

"How can I open NERDTree automatically when vim starts up on opening a directory?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif

" 關(guān)閉vim時抵卫,如果打開的文件除了NERDTree沒有其他文件時狮荔,它自動關(guān)閉,減少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" 開發(fā)的過程中介粘,我們希望git信息直接在NERDTree中顯示出來殖氏, 和Eclipse一樣,修改的文件和增加的文件都給出相應(yīng)的標(biāo)注姻采, 這時需要安裝的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "?",
    \ "Staged"    : "?",
    \ "Untracked" : "?",
    \ "Renamed"   : "?",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "?",
    \ "Dirty"     : "?",
    \ "Clean"     : "??",
    \ "Unknown"   : "?"
    \ }

" 顯示行號
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1

" 在終端啟動vim時雅采,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1

使用NERDTree

F3:自定義啟用/隱藏目錄樹
?: 快速幫助文檔
o: 打開一個目錄或者打開文件,創(chuàng)建的是buffer慨亲,也可以用來打開書簽
go: 打開一個文件婚瓜,但是光標(biāo)仍然留在NERDTree,創(chuàng)建的是buffer
t: 打開一個文件巡雨,創(chuàng)建的是Tab闰渔,對書簽同樣生效
T: 打開一個文件,但是光標(biāo)仍然留在NERDTree铐望,創(chuàng)建的是Tab冈涧,對書簽同樣生效
i: 水平分割創(chuàng)建文件的窗口,創(chuàng)建的是buffer
gi: 水平分割創(chuàng)建文件的窗口正蛙,但是光標(biāo)仍然留在NERDTree
s: 垂直分割創(chuàng)建文件的窗口督弓,創(chuàng)建的是buffer
gs: 和gi,go類似
x: 收起當(dāng)前打開的目錄
X: 收起所有打開的目錄
e: 以文件管理的方式打開選中的目錄
D: 刪除書簽
P: 大寫乒验,跳轉(zhuǎn)到當(dāng)前根路徑
p: 小寫愚隧,跳轉(zhuǎn)到光標(biāo)所在的上一級路徑
K: 跳轉(zhuǎn)到第一個子路徑
J: 跳轉(zhuǎn)到最后一個子路徑
<C-j>和<C-k>: 在同級目錄和文件間移動,忽略子目錄和子文件
C: 將根路徑設(shè)置為光標(biāo)所在的目錄
u: 設(shè)置上級目錄為根路徑
U: 設(shè)置上級目錄為跟路徑锻全,但是維持原來目錄打開的狀態(tài)
r: 刷新光標(biāo)所在的目錄
R: 刷新當(dāng)前根路徑
I: 顯示或者不顯示隱藏文件
f: 打開和關(guān)閉文件過濾器
q: 關(guān)閉NERDTree
A: 全屏顯示NERDTree狂塘,或者關(guān)閉全屏

分割布局

安裝插件

不用安裝額外插件

配置插件

" 指定屏幕上可以進(jìn)行分割布局的區(qū)域
set splitbelow               " 允許在下部分割布局
set splitright               " 允許在右側(cè)分隔布局

" 組合快捷鍵:
nnoremap <C-J> <C-W><C-J>    " 組合快捷鍵:- Ctrl-j 切換到下方的分割窗口
nnoremap <C-K> <C-W><C-K>    " 組合快捷鍵:- Ctrl-k 切換到上方的分割窗口
nnoremap <C-L> <C-W><C-L>    " 組合快捷鍵:- Ctrl-l 切換到右側(cè)的分割窗口
nnoremap <C-H> <C-W><C-H>    " 組合快捷鍵:- Ctrl-h 切換到左側(cè)的分割窗口

nnoremap是什么意思录煤?——簡單來說,nnoremap將一個組合快捷鍵映射為另一個快捷鍵荞胡。no部分妈踊,指的是在Vim的正常模式(Normal Mode)下,
而不是可視模式下重新映射泪漂。更多信息請看[這里]
(https://stackoverflow.com/questions/3776117/what-is-the-difference-between-the-remap-noremap-nnoremap-and-vnoremap-mapping)

使用插件

  1. 使用:sv <filename>命令廊营,新文件會在當(dāng)前文件下方界面打開打開;使用相反的命令:vs <filename>, 新文件會在當(dāng)前文件右側(cè)界面打開;記得在輸入完:sv后萝勤,利用tab補(bǔ)全功能露筒,快速查找文件。

  2. 你還可以嵌套分割布局敌卓,所以你可以在分割布局內(nèi)容再進(jìn)行分割慎式,縱向或橫向都可以,直到你滿意為止假哎。眾所周知瞬捕,我們開發(fā)時經(jīng)常需要同時查看多個文件

  3. 使用組合快捷鍵快速切換當(dāng)前激活窗口

    • Ctrl-j 切換到下方的分割窗口
    • Ctrl-k 切換到上方的分割窗口
    • Ctrl-l 切換到右側(cè)的分割窗口
    • Ctrl-h 切換到左側(cè)的分割窗口
  4. 使用緩沖區(qū),雖然Vim支持tab操作舵抹,仍有很多人更喜歡緩沖區(qū)和分割布局肪虎,你可以把緩沖區(qū)想象成最近打開的一個文件。:ls命令查看所有緩沖區(qū)惧蛹,輸入:b <filename or number>切換到一個已開啟的緩沖區(qū)(可使用自動補(bǔ)全)扇救。

:ls
1   a + "i.py"          line0
3   %a=+ "j.py"         line3
5   #a    "k.py"            line1

:b 1
:b k.py 

標(biāo)簽窗口——taglist

taglist是一個用于顯示定位程序中各種符號的插件,例如宏定義香嗓、變量名迅腔、結(jié)構(gòu)名、函數(shù)名這些東西 我們將其稱之為符號(symbols)靠娱,而在taglist中將其稱之為tag沧烈。顯然,要想將程序文件中的tag顯示出來像云,需要事先了解全部tag的信息锌雀,并將其保存在一個文件中,然后去解析對應(yīng)的tag文件迅诬。taglist做的僅僅是將tag文件中的內(nèi)容解析完后顯示在Vim上而已腋逆。tag掃描以及數(shù) 據(jù)文件的生成則是由ctags(Exuberant Ctags)這一工具完成的,所以在使用taglist之前侈贷,你的電腦需要裝有ctags惩歉。

安裝taglist

  • 安裝Ctags

ctags用來遍歷源代碼文件內(nèi)容生成tags文件,這些tags文件能被編輯器或其它工具用來快速查找定位源代碼中的符號(tag/symbol),如變量名撑蚌,函數(shù)名等上遥。Macos自帶了Ctags但是和這里要用的不是一個版本,默認(rèn)的Ctags只支持少有的幾種語言锨并,我們需要安裝的是Exuberant Ctags:

# 安裝ctags-exuberant
brew install ctags-exuberant

# 創(chuàng)建軟鏈接
ln -s /usr/local/Cellar/ctags/5.8_1/bin/ctags /usr/local/bin/ctags

# which ctags 顯示/usr/local/bin/ctags則說明默認(rèn)ctags是我們所安裝的那個版本
which ctags 
  • 生成tags
ctags –R *

-R表示遞歸創(chuàng)建露该,也就包括源代碼根目錄(當(dāng)前目錄)下的所有子目錄;*表示所有文件;這條命令會在當(dāng)前目錄下產(chǎn)生一個tags文件,當(dāng)用戶在當(dāng)前目錄中運(yùn)行vi/vim時第煮,會自動載入此tags文件。

Plugin 'taglist.vim'

配置taglist

let Tlist_Use_Right_Window = 1          "讓taglist窗口出現(xiàn)在Vim的右邊

let Tlist_File_Fold_Auto_Close = 1      "當(dāng)同時顯示多個文件中的tag時抑党,設(shè)置為1包警,可使taglist只顯示當(dāng)前文件tag,其它文件的tag都被折疊起來底靠。

let Tlist_Show_One_File = 1             "只顯示一個文件中的tag害晦,默認(rèn)為顯示多個

let Tlist_Sort_Type ='name'             "Tag的排序規(guī)則,以名字排序暑中。默認(rèn)是以在文件中出現(xiàn)的順序排序

let Tlist_GainFocus_On_ToggleOpen = 1       "Taglist窗口打開時壹瘟,立刻切換為有焦點狀態(tài)

let Tlist_Exit_OnlyWindow = 1           "如果taglist窗口是最后一個窗口,則退出vim

let Tlist_WinWidth = 32             "設(shè)置窗體寬度為32鳄逾,可以根據(jù)自己喜好設(shè)置

let Tlist_Ctags_Cmd='/usr/local/bin/ctags'  "這里比較重要了稻轨,設(shè)置ctags的位置,不是指向MacOS自帶的那個雕凹,而是我們用homebrew安裝的那個

map t :TlistToggle<CR>              "熱鍵設(shè)置殴俱,我設(shè)置成Leader+t來呼出和關(guān)閉Taglist

使用taglist

  • 通過熱鍵+t(,+t)或者:TlistToggle彈出/關(guān)閉標(biāo)簽窗口
  • 在標(biāo)簽窗口按F1可以打開以下幫助內(nèi)容
  • o 在一個新打開的窗口中顯示光標(biāo)下tag
  • 顯示光標(biāo)下tag的原型定義
  • u 更新taglist窗口中的tag
  • s 更改排序方式,在按名字排序和按出現(xiàn)順序排序間切換
  • x taglist窗口放大和縮小枚抵,方便查看較長的tag
  • 打開一個折疊线欲,同zo
  • 將tag折疊起來,同zc
  • 打開所有的折疊汽摹,同zR
  • = 將所有tag折疊起來李丰,同zM
  • [[ 跳到前一個文件
  • ]] 跳到后一個文件
  • q 關(guān)閉taglist窗口

python代碼縮進(jìn)

對于python來說,代碼的正確縮進(jìn)是至關(guān)重要的逼泣,我們將從以下幾個方面為vim配置代碼縮進(jìn)功能:

  1. python代碼的自動縮進(jìn)
  2. 遵從PEP8代碼風(fēng)格標(biāo)準(zhǔn)
  3. 自動格式化為PEP8代碼

安裝插件

  • 自動縮進(jìn)有用趴泌,但是在某些情況下(比如函數(shù)定義有多行的時候),并不總是會達(dá)到你想要的效果圾旨,尤其是在符合PEP8標(biāo)準(zhǔn)方面踱讨。我們可以利用indentpython.vim插件,來解決這個問題:
Plugin 'vim-scripts/indentpython.vim'
  • 將python代碼自動格式化為符合pep8標(biāo)準(zhǔn)的代碼用到tell-k/vim-autopep8插件:
Plugin 'tell-k/vim-autopep8'
  • 要使用tell-k/vim-autopep8插件必須先在電腦上安裝python的第三方包autopep8砍的。但奇怪的是用pip安裝時找不到這個包痹筛,我們使用easy-install來安裝,只需要在m某個python環(huán)境下安裝一次即可,實測在其他環(huán)境下也可用:
easy_install autopep8

配置插件

對于Python代碼而言帚稠,必須要支持PEP8風(fēng)格的縮進(jìn)谣旁,所以,需要在.vimrc文件中添加下面的配置滋早。這些設(shè)置將讓Vim中的Tab鍵就相當(dāng)于4個標(biāo)準(zhǔn)的空格符榄审,確保每行代碼長度不超過80個字符,并且會以unix格式儲存文件杆麸,避免在推送到Github或分享給其他用戶時出現(xiàn)文件轉(zhuǎn)換問題搁进。

" 按照PEP8標(biāo)準(zhǔn)來配置vim
au BufNewFile,BufRead *.py set tabstop=4 |set softtabstop=4|set shiftwidth=4|set textwidth=79|set expandtab|set autoindent|set fileformat=unix

另外,對于全棧開發(fā)昔头,你可以設(shè)置針對每種文件類型設(shè)置au命令:

au BufNewFile,BufRead *.js, *.html, *.css set tabstop=2|set softtabstop=2|set shiftwidth=2

下面來配置vim-autopep8

" Disable show diff window
let g:autopep8_disable_show_diff=1

" vim-autopep8自1.11版本之后取消了F8快捷鍵饼问,需要用戶自己為:Autopep8設(shè)置快捷鍵:
autocmd FileType python noremap <buffer> <F8> :call Autopep8()<CR>

使用插件

在使用macvim編輯*.py文件時:

  • 代碼自動按照PEP8規(guī)則進(jìn)行縮進(jìn);
  • tap鍵相當(dāng)于4個標(biāo)準(zhǔn)空格揭斧,每行代碼不超過80字符莱革;
  • 使用:Autopep8命令或者F8快捷鍵自動按照PEP8標(biāo)準(zhǔn)格式化python代碼

在使用macvim編輯*.js, *.html, *.css文件時,tap鍵相當(dāng)于2個標(biāo)準(zhǔn)空格

添加代碼縮進(jìn)指示線

安裝indentline

indentLine是一款縮進(jìn)指示線,由純字符實現(xiàn)讹开,效果比較完美

Plugin 'Yggdroot/indentLine'

配置indentline

indentLine默認(rèn)是關(guān)閉的盅视,因此需要在.vimrc中配置才能看到效果:

" 支持任意ASCII碼,也可以使用特殊字符:|, ┆, or │ 旦万,但只在utf-8編碼下有效
let g:indentLine_char='|'   

" 使indentline生效
let g:indentLine_enabled = 1    

使用indentline

在代碼縮進(jìn)處闹击,自動生成縮進(jìn)指示線

代碼折疊

大多數(shù)“現(xiàn)代”集成開發(fā)環(huán)境(IDE)都提供對方法(methods)或類(classes)進(jìn)行折疊的手段,只顯示類或方法的定義部分纸型,而不是全部的代碼拇砰。

安裝插件

本身不用安裝額外插件,但為避免出現(xiàn)超過你所希望的折疊數(shù)目狰腌,我們推薦SimplyFold來解決這個問題:

Plugin 'tmhedberg/SimpylFold'

配置插件

" 必須手動輸入za來折疊(和取消折疊)
set foldmethod=indent                " 根據(jù)每行的縮進(jìn)開啟折疊
set foldlevel=99

" 使用空格鍵會是更好的選擇,所以在你的配置文件中加上這一行命令吧:
nnoremap <space> za

" 希望看到折疊代碼的文檔字符串除破?
let g:SimpylFold_docstring_preview=1

使用插件

在程序塊處會顯示折疊線,當(dāng)光標(biāo)放于折疊線時琼腔,按空格鍵可以切換在該折疊線處是否折疊瑰枫。

代碼補(bǔ)全——YouCompleteMe

殺手級插件YouCompleteMe——vim上的自動補(bǔ)全神器:

  • 適用于任何語言,不同語言配置只有少許差異丹莲;
  • 多種補(bǔ)全引擎光坝,既可以根據(jù)標(biāo)識符也可以根據(jù)語義進(jìn)行補(bǔ)全;
  • 能夠提供類似IDE的自動補(bǔ)全體驗甥材,不用按任何鍵盯另,在寫代碼的同時會自動彈出代碼提示;
  • 還能和Syntastic配合提供實時語法檢查洲赵;
  • 不同于以往其他vim插件,YCM是一款編譯型的插件.在下載完后,需要手動編譯后才能使用鸳惯;

安裝YCM

先決條件:

  1. 最新版本的macvim商蕴,并且版本支持python2或python3
brew upgrade macvim

在 macvim 中鍵入命令 :echo has('python') || has('python3'),若結(jié)果是 1 則證明是支持的芝发,或者在macvim中輸入:version绪商,查看版本支持情況。

  1. 安裝Cmake
brew install cmake
  1. 如果需要安裝帶 C-family languages 語義支持的YCM版本辅鲸,需要將Xcode升級到最新版本格郁,同時安裝最新的命令行工具,同時還需要下載最新版的libclang独悴,詳情見YCM官方教程例书,這里我們安裝的是不帶 C-family languages 語義支持的版本。

安裝YouCompleteMe:

# 官方推薦使用Vundle安裝刻炒,只需將下面命令加入到~/.vimrc
Plugin 'Valloric/YouCompleteMe'

# 如果`:PluginInstall`過程出錯雾叭,則退出重新嘗試,或者直接從git上下載到`~/.vim/bundle/YouCompleteMe` 目錄下
git clone https://github.com/Valloric/YouCompleteMe#full-installation-guide ~/.vim/bundle/YouCompleteMe

編譯YCM

cd ~/.vim/bundle/YouCompleteMe

# 不帶 C-family languages 語義支持的版本
./install.sh

# 帶 C-family languages 語義支持的版本
./install.sh --clang-completer

# 帶 C# 語義支持的版本
./install.sh --omnisharp-completer

# 帶 Go 語言語義支持的版本
./install.sh --gocode-completer

配置YCM

" 補(bǔ)全菜單的開啟與關(guān)閉
set completeopt=longest,menu                    " 讓Vim的補(bǔ)全菜單行為與一般IDE一致(參考VimTip1228)
let g:ycm_min_num_of_chars_for_completion=2             " 從第2個鍵入字符就開始羅列匹配項
let g:ycm_cache_omnifunc=0                      " 禁止緩存匹配項,每次都重新生成匹配項
let g:ycm_autoclose_preview_window_after_completion=1       " 智能關(guān)閉自動補(bǔ)全窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif         " 離開插入模式后自動關(guān)閉預(yù)覽窗口

" 補(bǔ)全菜單中各項之間進(jìn)行切換和選嚷潋:默認(rèn)使用tab  s-tab進(jìn)行上下切換,使用空格選取暂幼》だ眨可進(jìn)行自定義設(shè)置:
"let g:ycm_key_list_select_completion=['<c-n>']
"let g:ycm_key_list_select_completion = ['<Down>']      " 通過上下鍵在補(bǔ)全菜單中進(jìn)行切換
"let g:ycm_key_list_previous_completion=['<c-p>']
"let g:ycm_key_list_previous_completion = ['<Up>']
inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>"    " 回車即選中補(bǔ)全菜單中的當(dāng)前項

" 開啟各種補(bǔ)全引擎
let g:ycm_collect_identifiers_from_tags_files=1         " 開啟 YCM 基于標(biāo)簽引擎
let g:ycm_auto_trigger = 1                  " 開啟 YCM 基于標(biāo)識符補(bǔ)全,默認(rèn)為1
let g:ycm_seed_identifiers_with_syntax=1                " 開啟 YCM 基于語法關(guān)鍵字補(bǔ)全
let g:ycm_complete_in_comments = 1              " 在注釋輸入中也能補(bǔ)全
let g:ycm_complete_in_strings = 1               " 在字符串輸入中也能補(bǔ)全
let g:ycm_collect_identifiers_from_comments_and_strings = 0 " 注釋和字符串中的文字也會被收入補(bǔ)全

" 重映射快捷鍵
"上下左右鍵的行為 會顯示其他信息,inoremap由i 插入模式和noremap不重映射組成旺嬉,只映射一層管行,不會映射到映射的映射
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>           " force recomile with syntastic
"nnoremap <leader>lo :lopen<CR>    "open locationlist
"nnoremap <leader>lc :lclose<CR>    "close locationlist
"inoremap <leader><leader> <C-x><C-o>

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳轉(zhuǎn)到定義處
let g:ycm_confirm_extra_conf=0                  " 關(guān)閉加載.ycm_extra_conf.py確認(rèn)提示

使用YCM

  • 編輯文本時,自動彈出補(bǔ)全菜單邪媳,通過tab和shift+tab鍵上下切換選項捐顷,enter或空格進(jìn)行選取。
  • 支持基于標(biāo)識符雨效、語義的補(bǔ)全迅涮,在注釋和字符串中進(jìn)行補(bǔ)全
  • 多語言支持,不僅僅是python徽龟,也包括其他非C族語言的補(bǔ)全

括號自動補(bǔ)全

auto-pairs主要功能是括號和引號自動補(bǔ)全叮姑,輸入左引號和左括號自動補(bǔ)全另外一半,安裝好就可以無需額外配置

Plugin 'jiangmiao/auto-pairs'

多行注釋

安裝插件

Plugin 'scrooloose/nerdcommenter'

配置插件

" nerdcommenter默認(rèn)熱鍵<leader>為'\',這里將熱鍵設(shè)置為','
let mapleader=','

" 設(shè)置注釋快捷鍵
map <F4> <leader>ci<CR>

使用插件

在normal模式下按v并移動光標(biāo)選擇需要注釋的行据悔,再按F4就可以為所有選中的行添加注釋

執(zhí)行python

其他常用的編輯器都有很方便的一鍵執(zhí)行的功能或插件传透,例如Sublime Text的command+b、Atom的script插件极颓。

vim實現(xiàn)這個功能只需要在.vimrc中添加如下代碼就可以實現(xiàn)F6一鍵執(zhí)行python代碼朱盐,而且由于是調(diào)用了vim的quickfix功能,因此還支持如果出現(xiàn)錯誤菠隆,跳轉(zhuǎn)到錯誤行兵琳。

map <F6> <ESC>:Autopep8<CR>:w<CR>:call RunPython()<CR>

function! RunPython()
  let mp = &makeprg
  let ef = &errorformat
  let exeFile = expand("%:t")
  setlocal makeprg=python\ -u
  set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
  silent make %
  copen
  let &makeprg = mp
  let &errorformat = ef
endfunction

映射快捷鍵F6狂秘,將自動執(zhí)行以下操作:切換至nomal模式>>執(zhí)行Autopep8規(guī)范代碼格式>>保存當(dāng)前文件>>調(diào)用Runpython自定義函數(shù),Runpython自動選取當(dāng)前環(huán)境下的python解釋器闰围。

配色方案

安裝配色方案

Vundle將配色方案也作為插件來管理赃绊,因此只需要在這里找到你喜歡的配色方案,然后按照普通插件的安裝方法進(jìn)行安裝即可羡榴,例如:

Plugin 'jakwings/vim-colors'

配置配色方案
vim的背景自動檢測是相當(dāng)不錯的碧查,至少在MacVim,不用做過多配置,使用默認(rèn)配置就能獲取很好的效果校仑;只需要將colorscheme your-theme添加到配置文件就行了忠售,vim每次(everytime)打開時會選取的你所設(shè)置的配色方案。

" 推薦幾種配色迄沫,使用哪種只需將其取消注釋即可

" 經(jīng)典的solarized
colorscheme solarized               " 白色背景

" Tomorrow系列
"colorscheme Tomorrow               " 白色背景
"colorscheme Tomorrow-Night         " 黑色背景,序號看不清
"colorscheme Tomorrow-Night-Bright      " 黑色背景,高對比度稻扬,最清晰
"colorscheme Tomorrow-Night-Eighties        " 黑色背景,低對比度

" 其他
"colorscheme desert
"colorscheme molokai
"colorscheme pablo
"colorscheme phd
"colorscheme pablo
"colorscheme slate

使用配色方案

打開vim,:colorscheme your-theme羊瘩, 即可臨時(only-once)切換至相應(yīng)配色方案泰佳;

:colorscheme按住空格+tab鍵來切換配色方案

美化狀態(tài)欄——powerline

安裝插件

首先準(zhǔn)備工作:

  • 在電腦上安裝powerline-status
安裝powerline-status
pip install powerline-status

# 查看是否已安裝成功
pip show powerline-status
  • 下載powerline字體solarized配色,解壓后找到vim-colors-solarized文件夾復(fù)制到~/.vim/bundle目錄下,或者簡單地添加如下命令:
Plugin 'vim-colors-solarized'

安裝vim-powerline插件:

Plugin 'vim-powerline'

配置插件

注意將字體換做powerline系列的尘吗,否則狀態(tài)欄可能出現(xiàn)亂碼逝她。

" 將字體設(shè)置為Meslo LG S DZ Regular for Powerline 13號大小
set guifont=Meslo\ LG\ S\ DZ\ Regular\ for\ Powerline:h13

let g:Powerline_symbols = 'fancy'       " Powerline_symbols為狀態(tài)欄中的箭頭,unicode沒有箭頭
"let g:Powerline_symbols= 'unicode'

set laststatus=2                " 必須設(shè)置為2,否則狀態(tài)欄不顯示
set t_Co=256                    " 開啟256顏色之后睬捶,colorschema在vim里好看了許多
let g:Powerline_colorscheme='solarized256'  " 狀態(tài)欄使用了solarized256配色方案

"set fillchars+=stl:\ ,stlnc:\          " 狀態(tài)欄如果有\(zhòng)\\\\或^^^^^等符號出現(xiàn)黔宛,添加此句再刪掉此句就好了

關(guān)于Vimscript

Vim有其腳本語言Vimscript,使用Vimscript寫成的宏可以實現(xiàn)自動執(zhí)行復(fù)雜的操作擒贸。用 -s選項啟動Vim臀晃,或者直接切換到宏所在目錄使用':source'命令都可以執(zhí)行Vim腳本。Vim的配置文件就可以作為Vim腳本的一個范例介劫,Unix和Linux下配置文件名是.vimrc徽惋,Windows下配置文件一般叫做_vimrc。這個文件在啟動Vim的時候被自動執(zhí)行蜕猫。Vimscript可以使用Vim 命令行模式的所有命令寂曹,使用':normal'命令還可以使用通常模式中的所有命令。Vimscript具有數(shù)字回右,字符串兩種數(shù)據(jù)類型隆圆。用數(shù)字代表布爾類型,0代表假翔烁,之外的數(shù)全代表真渺氧。最新的Vim 7更提供了列表、關(guān)聯(lián)數(shù)組等高級數(shù)據(jù)結(jié)構(gòu)蹬屹。Vimscript也擁有各種比較運(yùn)算符和算術(shù)運(yùn)算符侣背“谆控制結(jié)構(gòu)實現(xiàn)了if分支和for/while循環(huán)。用戶還可以自己定義函數(shù)贩耐,并且可以使用超過100種的預(yù)定義函數(shù)弧腥。編寫成的腳本文件可以在調(diào)試模式中進(jìn)行調(diào)試。

關(guān)于Vimscript的詳細(xì)介紹可以參考笨方法學(xué)Vimscript

由于配置文件過長就不貼出了潮太!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末管搪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铡买,更是在濱河造成了極大的恐慌更鲁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奇钞,死亡現(xiàn)場離奇詭異澡为,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)景埃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門媒至,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谷徙,你說我怎么就攤上這事塘慕。” “怎么了蒂胞?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長条篷。 經(jīng)常有香客問我骗随,道長,這世上最難降的妖魔是什么赴叹? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任鸿染,我火速辦了婚禮,結(jié)果婚禮上乞巧,老公的妹妹穿的比我還像新娘涨椒。我一直安慰自己,他們只是感情好绽媒,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布蚕冬。 她就那樣靜靜地躺著,像睡著了一般是辕。 火紅的嫁衣襯著肌膚如雪囤热。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天获三,我揣著相機(jī)與錄音旁蔼,去河邊找鬼锨苏。 笑死,一個胖子當(dāng)著我的面吹牛棺聊,可吹牛的內(nèi)容都是我干的伞租。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼限佩,長吁一口氣:“原來是場噩夢啊……” “哼宇弛!你這毒婦竟也來了哗伯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烦租,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體转晰,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡郭怪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了广辰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇矫。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖择吊,靈堂內(nèi)的尸體忽然破棺而出李根,到底是詐尸還是另有隱情,我是刑警寧澤几睛,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布房轿,位于F島的核電站,受9級特大地震影響所森,放射性物質(zhì)發(fā)生泄漏囱持。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一焕济、第九天 我趴在偏房一處隱蔽的房頂上張望纷妆。 院中可真熱鬧,春花似錦晴弃、人聲如沸掩幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽际邻。三九已至,卻和暖如春芍阎,著一層夾襖步出監(jiān)牢的瞬間枯怖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工能曾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留度硝,地道東北人肿轨。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像蕊程,于是被迫代替她去往敵國和親椒袍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容