VIM(新手入門)
SomethingNew
相信看了這篇文章大家可以配置自己喜歡的vim,個人現(xiàn)在在小專欄專門更新和vim相關(guān)操作的文章,歡迎來訂閱呀。個人小專欄主頁在此
重要!
前兩天看了大佬的文章,確實本文現(xiàn)在使用的插件比較老了,尤其是Syntastic,大幅度拖慢了Vim的速度,是時候Update一下了,現(xiàn)在使用了Plug替代了Vundle, 用其他插件替代了Syntastic/nerdtree/ctrlp/gitgutter/tagbar/nerdtree-git-plugin等插件!VIM體驗有了質(zhì)一般的提升,大家可以關(guān)注下我的Vim小專欄啦,已經(jīng)寫了遷移的教程啦,還會陸續(xù)更新的!
序言
很多人把vim奉為最強編輯器,有很多很多大牛,用vim作為他們的生產(chǎn)工具。某乎上也一刻不停的爭論著,VIM是不是真的有它流傳的那么厲害。對于小白,很可能只是用過一兩次,就被沒有GUI的編輯習(xí)慣所勸退,聽著大佬們傳著VIM多么多么屌,仿佛自己玩的不是同一個游戲。經(jīng)過一天的調(diào)試VIM,我終于在Mac High Sierra下成功配置了我的VIM,也是第一次由衷覺得vim確實是蠻好用的。捎帶推薦Mac用戶安裝iterm2和oh-my-zsh,這里有一個我覺得不錯的教程文章。
附上我的成果圖:

VIM的安裝和基本操作(小白版)
VIM的安裝(主要針對mac和linux用戶,Windows沒有試過)
有兩個方法二選一:
1、brew install & 從brew安裝
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//直接執(zhí)行上述指令即可安裝brew
brew info vim //查看可選選項
brew install python2
brew install vim --with-client-server --with-lua --with-luajit
//lua和python分別是一些插件的必備條件
//client-server也是必須的,好多插件要用,這個直接編輯源碼目前mac是做不到的,linux隨意
vim --version | grep python
vim --version | grep lua
//檢查python和lua前是否是+號,如果不是重復(fù)上述操作,保證python和lua前是+號
2、源碼編譯
//首先同1的相同,要先安裝brew,隨后安裝git和python,lua是系統(tǒng)自帶的好像
brew install git
brew install python
git clone https://github.com/vim/vim.git ~/vim
//從git上下載vim源碼,github速度比較慢,建議科學(xué)一下上網(wǎng)
cd ~/vim/ //切換到剛才源碼下載的位置
./configure \
--enable-multibyte \
--enable-perlinterp \
--enable-rubyinterp \
--enable-pythoninterp \
--enable-python3interp \
--enable-luainterp \
--with-lua-prefix=/usr/local \
--enable-cscope \
--with-client-server \
--with-features=huge \
--with-x \
--enable-fontset \
--enable-largefile \
--disable-netbeans \
--with-compiledby="DeamoV" \
--enable-fail-if-missing
cat log | grep python
cat log | grep lua
//檢查python和lua是否編譯正常
make
sudo make install
//之后vim就安裝完成了
vim --version | grep python
vim --version | grep lua
//檢查下vim是否成功的支持了python和lua
基本操作
我個人也是剛認識VIM,以下是我對VIM的自己的理解。
首先VIM分編輯模式和命令模式。
1、編輯模式
? 編輯模式顧名思義就是編輯,就是我們常用的打字,通過點按鍵A或者按鍵i進入,進入編輯模式后,就正常打字輸入就是了。想要退出編輯模式進去命令模式就是按鍵esc。
2、命令模式
? 命令模式就是進行一些常用的操作,也是vim下的亮點操作。
? h,j,k,l分別是控制方向的,方向鍵也可以,點方向前輸入數(shù)字就是移動多少行或者多少列,例如10h就是想做移動10列,這一點也可以在下面說到的刪除操作中應(yīng)用,例如10dh就是往左刪除10個字符,而/這個按鍵就是進入搜索模式,在配置文件的幫助下,可以實時的高亮,搜索字符串打完后回車,n和N分別是向下查找和向上查找,非常方便。
? 0跳轉(zhuǎn)到行首,$跳轉(zhuǎn)到行尾。
? dd是刪除本行,yy是復(fù)制一行,p是黏貼,u是撤銷。
3、退出和存儲
? 在命令行模式下輸入:q就是退出,:w是存儲文件,存儲命令后接地址就是存儲在什么位置,如:w ~/Document/test.txt。
? 指令是可以連用的,如:wq就是儲存并推出。
? 任何指令后加!都是強制操作,如:q!就是強制退出。
以上就是我常用的操作,其他的操作如分屏顯示:vs等可以自己百度,或者參見菜鳥教程網(wǎng)站中的教程。
插件的安裝&VIM的美化
? 上面是Vim的一些基本的安裝和操作,要做到非常簡單,很多IDE端的VIM插件也就實現(xiàn)到這里。不過這樣不一定能體驗到Vim好玩的地方,接下來介紹的就是Vim最神奇的地方了。對我而言,如果你安裝了Vim,沒有對配置和插件進行定制化,那么你完全沒有體驗到Vim好玩的地方,注意這里我說的是好玩,所以不去討論Vim是否能夠提高效率這件事(個人覺得提高效率應(yīng)該是通過提高自己的思維格局的,而不是一個工具能夠改變的)。
1、插件的安裝
? 所有的Vim的配置文件在~/.vimrc目錄下,插件會下載到~/.vim文件夾下。大部分的插件安裝就是簡單的,在安裝完Vundle插件管理插件后,在配置文件里面加入Plugin 插件/名,如Plugin 'honza/vim-snippets',隨后輸入:source %,來生效文件,接下來:Plugin Install等就好了。接下來就重啟vim就好了。
? But,有些插件需要額外的配置,這些需要去你要安裝的插件的Github下查看需求,如YCM需要單獨編譯等,個人建議去讀Github原文來安裝和配置。
? Vundle安裝,首先把Vundle下載到~/.vim/bundle。
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
? 隨后在vimrc中配置如下,可以把不需要的Plugin注釋掉。
set nocompatible " be iMproved, 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 'VundleVim/Vundle.vim'
" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
? 最后 后vim 中運行:PluginInstall,至此Vundle安裝就完成了。
? 注意卸載的時候,除了注釋掉我們要刪除的插件以外,還需要:source %之后運行:Plugin Clean來清除我們之前刪除本地下載的殘留插件文件。
2、已安裝插件介紹
1、美化插件插件
airline系列(bling/vim-airline,vim-airline/vim-airline-themes)
? airline是指的,在開開vim后下面的狀態(tài)欄,可以顯示字數(shù),行數(shù),github中是在哪個分支等功能,可以和別的插件如ctrlp,synastic很好的融合,使編譯環(huán)境更美觀和直白。
Plugin 'bling/vim-airline'
Plugin 'vim-airline/vim-airline-thems'
隨后執(zhí)行:Plugin Install。
indentLine(Yggdroot/indentLine)
? 在編代碼的時候,需要代碼對齊什么的,這時候肉眼去確定比較難,這時候就需要這個插件來輔助。同樣的安裝如airline。
Plugin 'Yggdroot/indentLine'
? 隨后執(zhí)行,:plugin Install。
bufferline(bling/vim-bufferline)
? 這個插件,解決的問題就是文件的切換問題,這個插件可以讓你在打開的多個文件緩存間切換。
Plugin 'bling/vim-bufferline'
? 最后執(zhí)行,:Plugin Install。
? 切換的時候輸入:b n來切換到第n個緩存。
效果圖

2、代碼閱讀插件
syntastic
? 這個插件使用來進行代碼語法檢查的插件,這個插件是和YCM并駕齊驅(qū)的安裝vim最推薦的幾個插件之一。安裝如下。
Plugin 'scrooloose/syntastic'
? 隨后同理:Plugin Install
? 然后在vimrc中加入,
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
? 這里我就不說這幾個設(shè)置是什么意思了,大家可以把1變成0試試就知道了,其實看變量名就大概知道意思了(笑。不過具體的代碼檢查,如何對不同的語言的代碼進行不同的代碼語法檢查。這里的設(shè)置還是比較復(fù)雜的,詳情請參考我的vim的配置文件,在文章末尾會給出github地址。
效果圖如下:

tagbar
? 在閱讀大段代碼的時候,我們希望我們有一個整體的結(jié)構(gòu)把我,這時候就需要這個插件了,這個插件把代碼的結(jié)構(gòu)很清晰的展現(xiàn)在我們眼前,并選擇我們要的函數(shù)時會自動跳轉(zhuǎn),非常的方便。
Plugin 'majutsushi/tagbar'
? 正常安裝就好。

? 使用方法輸入,:Tagbar開啟
代碼高亮
? 代碼高亮是一個非常有用的功能,vim其實是自帶的有的,可以進行配置,詳細參數(shù)請自行百度,但是直接使用我的配置文件就應(yīng)該是okay的。不過自帶的對代碼的高亮支持有限,推薦去自行安裝自己需要的代碼高亮插件。比如我安裝的solidity的代碼高亮的插件是,Plugin 'tomlion/vim-solidity',這些每個人的需求不同安裝很簡單所以就不贅述了。
代碼折疊
? 代碼折疊也是很重要的,我這里就簡單介紹下如何使用吧,首先查找相關(guān)教程的指令是,
:help folding,在這里可以查找到我們想要的所有快捷鍵。
? 常用操作:
`zR` 打開所有折疊
`zM` 關(guān)閉所有折疊
`za` 打開或關(guān)閉光折疊, `zA` 循環(huán)打開或關(guān)閉折疊
`zi` 翻轉(zhuǎn) 'foldenable' 的值
`zj` 移動光標到下一個折疊開始處, `zk` 類似 `zj`
`[z` 移動光標到當前打開的折疊的開始處, `]z` 類似 `[z]`
3、編寫代碼操作
YouComplteMe
? 這個插件簡直就是神一般的插件,他不僅可以給你補全代碼,還能幫你補全路徑,媽媽再也不用擔心我打錯路徑了。不過遺憾的是,這個插件是vim所有插件中最難裝的,而且加上github被限速以后更加的難以安裝(因為中間git的時候容易失敗,不過用ssh git會好很多,強烈建議在用終端的時候先用export進行番羽操作)
? 首先給出官方文檔,安裝任何插件,優(yōu)先使用最官方的文檔,任何人的博客包括我都只能作為參考,請習(xí)慣查閱官方手冊會讓很多事情變得簡單,同理類比Cuda的安裝。
? 以下為安裝步驟。
? 首先你必須安裝了最新的Xcode,然后使用使用指令,xcode-select —install。
? 在vimrc中加入Plugin 'Valloric/YouCompleteMe',隨后:Plugin Install。之后會在vim下bundle目錄下出現(xiàn)YouCompeteMe文件夾,切換到那個目錄,隨后運行./isntall.py --all,如果只想安裝個別的代碼補全請自行參考官方文檔。
? 很遺憾的是,這么做,./install.py,肯定是會報錯的,其實這里的原因是里面引入了第三方的倉庫,所以還需要手動的輸入git submodule update --init --recursive來把那部分補充下載下來。然后再install就好了。
? 最后,把給出的樣例文件拷到根目錄下,就可以生成了。注意這一步,我獨居YCM的了解不夠多,還沒有深入了解,有興趣的朋友可以深入了解,這里如何DIY來更加符合個人的使用情況。
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/
? 然后vimrc中的配置請參考我的vimrc配置,Github中g(shù)it下來覆蓋你的vimrc就好了,到此安裝就結(jié)束了。
? 其他的錯誤的坑,報錯如下。
YouCompleteMe unavailable+ Symbol not found: __PyCodecInfo_GetIncrementalDecoder
? 問題可能是python的安裝環(huán)境的問題,問題參考如下,這里推薦下,遇到問題請先查閱這個開源項目中的issue,一般都會找到合適的答案的,任何沒經(jīng)過自己的努力就求助別人的伸手黨行為都是可恥的。
? 解決方案如下:執(zhí)行完就好了之后你想在link回去也是okay的。
brew unlink python@2
brew unlink python
Snippets
? 這里就是我最喜歡的部分了,想來大家編程的小哥哥小姐姐們都知道,我們每次打代碼的時候最煩的就是重復(fù)性輸入了,這兩個插件就是用來解決這個問題的(目前本人還沒挖透他),所以都一直在用著別人寫好的snippets。這個功能怎么說呢,就是快速的把輸入全幫你輸入了。
#輸入dowh,然后tab直接幫你輸入了所有的代碼,然后把光標放到你要注意輸入的地方。
do{
//
}while()
? 最重要的是,這里你不需要自己造輪子,有很多別人編好的snippets,你用Plugin裝了就好了,當你熟練后也可以自己來寫。
? 安裝方法:vimrc中加入,SirVer/ultisnips和Hones/vim-snippets,然后:Plugin Install一下就ojbk了。
括號引號方面
? 這個是用來補全括號和引號的插件,我們編寫代碼的時候我們會輸入大量的括號和引號,如果我們每次都手動補全的話會非常的麻煩這里就是用以下兩個插件Raimondi/delimitMate和vim-scripts/matchit.zip。同樣的安裝手法,安裝完成后會自動補全,最終要的是會把光標移回括號的中間,當打完內(nèi)容后shift+tab就可以輕松移出,matchit則是提供了%來自動跳轉(zhuǎn)匹配的括號。
注釋
? 我選的是nerdcommenter,輸入Plugin ddollar/nerdcommenter,隨后正常安裝即可。他支持很多中注釋方案,你可以去官方查看說明。個人常用的就是<leader>cc進行注釋,<leader>c+space進行取消注釋非常的方便。
4、文件管理
NERDTree
? 插件就非常的舒服了,它可以在邊欄打開一個文件目錄,選中可以打開目錄,非常的方便。
Plugin scrooloose/nerdtree進行安裝。
? 效果圖如下

Ctrlp
? 這里要注意,我的Ctrlp是和ctrl-py-matcher一起裝的,如果只裝了一個會報錯的。同時我的環(huán)境中使用了ag來搜索。
? ag的安裝brew install the_silver_searcher。
? 使用方法為,ctrl+p之后輸入你要搜索的文件,他會在當前目錄以及目錄下子目錄的文件進行模糊搜索,速度非???。搜索一次后會緩存下來,下次就不用緩存了。注意,不要去root目錄下打開,文件太多要等好久。
? 其他操作為,c-f和c-b切換mru,file還是buffer模式。c-r開啟正則表達式,c-j,c-k上下移動。
c-t,c-v,c-x分屏打開。c-z標記文件,然后c-o一起打開他們。
? 效果圖如下

如何打造自己的順手的VIM
? 說實話,別人的配置不一定適合你。使用別人的配置然后理解這些配置是入門的開始。隨著實際工作的需要我們會慢慢的添加新的功能,相信我,大部分能想到的功能它都能做到,比如Latex論文書寫和實時展示,Solidity的代碼高亮和語法檢查等等。插件的安裝大部分都非常簡單,在這個網(wǎng)站中搜索你要的插件,然后就和之前咱們安裝插件的步驟一樣,加入Plugin,Install一鍵合成。如果你遇到了現(xiàn)有插件滿足不了你的的情況,不要猶豫,請動手構(gòu)建屬于我們自己的插件再上傳為VIM社區(qū)貢獻自己的力量。
還有一件事情
? 能閱讀到這里的小伙伴,我相信你們一定不是伸手黨,所以在這里我附上了我的配置文件,下載下來按照說明進行配置,希望你們能達到和我一樣的效果。我的Github地址。在里面我提供了一個腳本,可以嘗試著一鍵運行,但是推薦打開看看,一行一行自己運行。
最后
? 這個文章寫作用時5小時以上,如果有幫助到你的話,希望能關(guān)注下我的Github,博客,給個星星什么的。
date 2018.5.13
附加
之前有朋友反映說配置文件直接放進去后,每次啟動都有報錯,這個原因可能是因為字體和主題還有pathogen沒有安裝。故作此補充
mkdir ~/.vim
mkdir ~/.vim/bundle
git clone https://github.com/VundleVim/Vundle.vim.git \
~/.vim/bundle/Vundle.vim
git clone https://github.com/flazz/vim-colorschemes.git \
~/.vim
mv vim-colorschemes/colors/ ~/.vim/
git clone https://github.com/powerline/fonts.git ~/.vim/
cd ~/.vim/fonts
./install.sh #安裝powerline字體
mkdir ~/.vim/autoload
git clone https://github.com/tpope/vim-pathogen.git ~/.vim/
mv ~/.vim/vim-pathogen/autoload/pathogen.vim ~/.vim/autoload
#安裝pathogen,思路就是把pathogen.vim下載下來扔到autoload文件夾里