Vim 折騰記
原文地址:http://www.ahonn.me/2017/02/1...
昨天在微信讀書上面看到了池建強的《MacTalk 人生元編程》,然後花了差不多一天看完,其中有篇有關於 Vim 的文章提起了我對這個編輯器的再一次興趣(對的,我對它感興趣很多次了,每次都懶..)。
一直懶得去慢慢配置它,又不想用別人的配置。自己用的編輯器還是想自己折騰,然後今天就趁著我對這個還有點熱度趕緊折騰起來。
MacVim
其實在命令行裡面直接寫代碼還有有些不習慣的,所以選了 MacVim 這個 GUI 版本。這樣又可以與其他編輯器一樣單獨打開,想小改代碼的時候又可以直接打開命令行搞。
在 MacTalk 的文章裡面有提到 Vim 中文版本的幫助文檔,遂下載之。果然還是中文的比較淺顯易懂。
以前看別人的 .vimrc 配置,裡面有些編輯器的基本配置,也不知道是哪裡查的。原來這些配置可以在編輯器中輸入 :help options 進行查看。
縮進
關於縮進的配置,主要設置了 autoindent, smartindent 和 expandtab 這三個選項。
autoindent 選項根據上一行決定新行的縮進
smartindent 選項智能自動縮進
expandtab 選項將 tab 轉換為空格
set autoindentnset smartindentnset expandtabn
行號
顯示行號是硬需求,但是與其他編輯器不同,在 vim 上還有相對行號。
set numbernset relativenumbern
插件
顯而易見,手動安裝 vim 插件是很麻煩很麻煩的。與 sublime text 之類的類似,vim 同樣有類似的插件管理器 Vundle。
創建文件夾 ~/.vim 和配置文件 ~/.vimrc,並安裝 Vundle:
$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundlen
為了方便管理再新建一個 .vimrc.bundles 來單獨存放插件列表:
set nocompatible " be iMproved, requirednfiletype off " requriednset rtp+=~/.vim/bundle/vundle/nncall vundle#begin()nn" Let Vundle manage VundlenBundle gmarik/vundlenn" .... 其他插件nncall vundle#end()n" requirednfiletype plugin indent onn
以後添加插件的時候只需要在這個文件裡面添加一行:
Bundle xxxn
安裝插件輸入 :BundleInstall 命令即可,卸載插件時刪除對應的配置並運行 :BundleClean 刪除插件。
括弧補全
第一次用的時候,輸入 ( 居然沒有自己蹦出來另外一個 )。這不科學,講道理這個是一定要的。
發現很多人用的是 delimitMate ,添加 Bundle delimitMate 到 .vimrc.bundles,運行 BundleInstall。
安裝完直接就可以自動補全括弧了。
Emmet
很多瀏覽器都支持 Emmet 插件,vim 同樣也有。但這個 Emmet 是第三方的,叫 Emmet.vim。
安裝完之後主要是設置一下出發的快捷鍵,默認的快捷鍵是 Ctrl + y。
我把快捷鍵修改成 Ctrl + e 比較順手。
" Emmet.vimnlet g:user_emmet_expandabbr_key = <c-e>n
目錄樹
目錄樹就基本上也就是使用 NERDTree。
開啟目錄樹的快捷鍵修改為 Ctrl + b,然後當 vim 只剩目錄樹顯示的時候自動退出。
" NERDTree nmap <c-b> :NERDTreeToggle<CR>nautocmd vimenter * NERDTreenautocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary") | q | endifn
補全
補全用的就是大名鼎鼎的 YouCompleteMe 了。
關於這個插件網上有很多插件,我就不啰嗦了。這裡主要是抄的百度 EFE 的配置:
" YouCompleteMen" http://efe.baidu.com/blog/vim-javascript-completion/#youcompletemenlet g:ycm_min_num_of_chars_for_completion = 3 nlet g:ycm_autoclose_preview_window_after_completion=1nlet g:ycm_complete_in_comments = 1nlet g:ycm_key_list_select_completion = [<c-n>, <Down>]nlet g:ycm_key_list_previous_completion = [<c-p>, <Up>]n" Use tabnfunction! TabFunction ()n let line = getline(.)n let substr = strpart(line, -1, col(.)+1)n let substr = matchstr(substr, "[^ t]*$")n if strlen(substr) == 0n return "<tab>"n endifn return pumvisible() ? "<c-n>" : "<c-x><c-o>"nendfunctionninoremap <tab> <c-r>=TabFunction()<cr>nnlet g:ycm_semantic_triggers = {n css: [ re!^s{2}, re!:s+],n html: [ </ ],n }n
總結
折騰了一下午,終於算是搞定了。其實過程還是蠻好玩的,有機會還想寫寫插件玩玩。拋棄 VS Code,開始 Vim 之旅。
推薦閱讀:
※打造Python開發工具——vim+zsh+tmux
※SpaceVim 模塊化狀態欄
※從零開始配置跨平台多人合作LaTeX論文寫作環境
※vim 中文輸入解決方案
※Stack Overflow:幫助一百萬開發者退出 Vim
TAG:Vim |