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:
- Github上下載
macvim.dmg
安裝包進(jìn)行安裝 - 使用Homebrew安裝
這也是我們所采用的方式:
brew install macvim
建立軟鏈接
無論使用哪種方式進(jìn)行安裝升敲,可以在MacVim.app包文件中找到mvim和vim的可執(zhí)行文件答倡,要在shell中方便的執(zhí)行這些命令,可以:
- 將可執(zhí)行文件所在路徑添加到環(huán)境變量
$PATH
中 - 將可執(zhí)行文件復(fù)制到環(huán)境變量
$PATH
中的某一個路徑下驴党; - 在
$PATH
中的某一個路徑下創(chuàng)建該可執(zhí)行文件的軟/硬鏈接瘪撇; - 為可執(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
- vimrc是vim最常用的配置文件
- gvim是Gvim的配置文件
- 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也就是說:
- 用戶配置文件中的配置會覆蓋全局配置文件的配置;因此厚棵,我們可以通過創(chuàng)建~/.vimrc來修改vim的默認(rèn)配置蕉世。
- 對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
配置文件基本配置
顯示中文幫助
- 下載vimdoc
- 將文件解壓到~/.vim/doc虚茶,若路徑不存在則自己創(chuàng)建
- 打開vim執(zhí)行:helptags ~/.vim/doc
- 在~/.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è)置不正確引起:
- enc捞高,vim內(nèi)部使用的編碼氯材,如buffer渣锦,寄存器中的字符串,windows一般是gbk氢哮,mac是utf-8
- fenc袋毙,當(dāng)前打開文件自身的編碼,如果enc和fenc不一致冗尤,vim會做編碼轉(zhuǎn)換听盖,轉(zhuǎn)換成fenc編碼保存文件
- fencs,一個字符編碼列表生闲,編碼的自動識別就是通過它實現(xiàn)的
- 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é)為:
- 在配置文件.vimrc中领斥,將希望安裝的插件寫入
call vundle#begin()
和call vundle#end()
行之間:Plugin '插件名' - 然后打開Vim編輯器,運(yùn)行下面的命令:
:PluginInstall
沃暗,Vundle就會自動下載安裝對應(yīng)的插件 - 在.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)
使用插件
使用
:sv <filename>
命令廊营,新文件會在當(dāng)前文件下方界面打開打開;使用相反的命令:vs <filename>
, 新文件會在當(dāng)前文件右側(cè)界面打開;記得在輸入完:sv
后萝勤,利用tab補(bǔ)全功能露筒,快速查找文件。你還可以嵌套分割布局敌卓,所以你可以在分割布局內(nèi)容再進(jìn)行分割慎式,縱向或橫向都可以,直到你滿意為止假哎。眾所周知瞬捕,我們開發(fā)時經(jīng)常需要同時查看多個文件
-
使用組合快捷鍵快速切換當(dāng)前激活窗口
- Ctrl-j 切換到下方的分割窗口
- Ctrl-k 切換到上方的分割窗口
- Ctrl-l 切換到右側(cè)的分割窗口
- Ctrl-h 切換到左側(cè)的分割窗口
使用緩沖區(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)功能:
- python代碼的自動縮進(jìn)
- 遵從PEP8代碼風(fēng)格標(biāo)準(zhǔn)
- 自動格式化為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
先決條件:
- 最新版本的macvim商蕴,并且版本支持python2或python3
brew upgrade macvim
在 macvim 中鍵入命令 :echo has('python') || has('python3')
,若結(jié)果是 1 則證明是支持的芝发,或者在macvim中輸入:version
绪商,查看版本支持情況。
- 安裝Cmake
brew install cmake
- 如果需要安裝帶 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
由于配置文件過長就不貼出了潮太!