原文:https://keelii.github.io/2016/06/13/awsome-window-vimrc/前端
一直以來被稱爲編輯器之神的 vim 在 Windows 下很難發揮其強大的功能,本文從實用的角度闡述如何調校出一個比較好用的 vimgit
不過仍然要說明下,在衆多 vim 構建版本中 Mac OS 平臺的 MacVim 是我認爲最好用的一個版本。因爲本身公司主力用 Windows,又因筆者是一枚對編輯器顏值體驗有要求的前端工程師, 因此纔有了下文 ^!^github
先說明下開發環境:編程
ThinkPad T450 (公司標配)vim
Windows 7 SP1 64bit 企業版windows
編程語言 Javascript, HTML, CSS, NodeJS, Python前端工程師
本文旨在配置和使用 vim,並不適合太初級的 vim 用戶,本文做者也不是 vim 死忠粉,常常混用 Webstrom 和 vimcurl
開始以前咱們先看一眼 Windows 上安裝 Gvim 的默認界面,咱們將從這裏開始一步步的學習和配置編程語言
因爲 vimrc 裏面會有不少的配置項,爲了不混亂,我大概按本身的使用習慣分紅了幾個小組:編輯器
Startup - 編輯器啓動時須要添加的一些配置
General - 通用配置
Lang & Encoding - 語言和編碼
GUI - 界面
Format - 基本的代碼格式
Keymap - 通用的快捷鍵
Plugin - 插件相關(包括和當前插件相關的配置和快捷鍵等)
Function - vimrc 裏面用到的經常使用方法
" Startup {{{ filetype indent plugin on " vim 文件摺疊方式爲 marker augroup ft_vim au! au FileType vim setlocal foldmethod=marker augroup END " }}}
設置 vim 相關文件打開後默認摺疊方式爲 marker,約定俗成的用三個花括號註釋包裹起來,這樣在你打開配置文件的時候 vim 就會幫你摺疊起來,配置文件看起來就簡潔多了,如圖:
" General {{{ set nocompatible set nobackup set noswapfile set history=1024 set autochdir set whichwrap=b,s,<,>,[,] set nobomb set backspace=indent,eol,start whichwrap+=<,>,[,] " Vim 的默認寄存器和系統剪貼板共享 set clipboard+=unnamed " 設置 alt 鍵不映射到菜單欄 set winaltkeys=no " }}}
基本上一眼就能看出來這是些啥玩意,不事後面兩項目我我的感受比較好用:
clipboard+=unnamed 好比你在其它地方 copy 了一段文字回到 vim 裏面能夠粘貼進來
winaltkeys=no 通常 windows 下應用程序的 alt 是用來定位菜單欄目的快捷鍵,咱們須要禁用它,由於咱們後面不少設置都須要使用 alt,須要使用 alt 來定位菜單的狀況不多
" Lang & Encoding {{{ set fileencodings=utf-8,gbk2312,gbk,gb18030,cp936 set encoding=utf-8 set langmenu=zh_CN let $LANG = 'en_US.UTF-8' "language messages zh_CN.UTF-8 " }}}
vim 裏面設置編碼的地方不少,上面這些配置能夠保證不會出現亂碼,像文件菜單、vim默認語言建議設置成 en_US
" GUI {{{ colorscheme Tomorrow-Night source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim set cursorline set hlsearch set number " 窗口大小 set lines=35 columns=140 " 分割出來的窗口位於當前窗口下邊/右邊 set splitbelow set splitright "不顯示工具/菜單欄 set guioptions-=T set guioptions-=m set guioptions-=L set guioptions-=r set guioptions-=b " 使用內置 tab 樣式而不是 gui set guioptions-=e set nolist " set listchars=tab:▶\ ,eol:¬,trail:·,extends:>,precedes:< set guifont=Inconsolata:h12:cANSI " }}}
編輯器配色建議使用 Tomorrow-Night,下載文件 copy 到 colors 目錄便可
從上面的設置能夠看出來,爲了獲得一個簡潔漂亮的界面,咱們去掉了菜單欄、各類滾動條、使用 vim 內置 tab 而不是 gvim 系統的 tab 樣式,注意不少開發者喜歡顯示不可見字符,好比:tab 製表符、換行符號、尾空格等。
我本身並不喜歡這樣,由於這樣只會使界面看起來更零亂,尤爲是某插件縱向標尺
字體方面我的推薦 Inconsolata 這個在我看來是 Windows 平臺最漂亮的等寬字體了
此時你的編輯器應該好看了不少:
" Format {{{ set autoindent set smartindent set tabstop=4 set expandtab set softtabstop=4 set foldmethod=indent syntax on " }}}
這個設置容易引發爭議,我本身是這麼個設置,你們按我的喜愛就好了,反正我是不建議使用 tab 的,對代碼格式有強迫症的人通常都會設置 foldmethod=indent
能夠說快捷鍵是每一個編輯器必備的功能,科學的設置快捷鍵能很大程度的提升效率。快捷鍵的設置要遵循一個規則:儘可能不要修改系統默認配置的快捷鍵,非要設置的話選擇好相應的模式
" Keymap {{{ let mapleader="," nmap <leader>s :source $VIM/_vimrc<cr> nmap <leader>e :e $VIM/_vimrc<cr> map <leader>tn :tabnew<cr> map <leader>tc :tabclose<cr> map <leader>th :tabp<cr> map <leader>tl :tabn<cr> " 移動分割窗口 nmap <C-j> <C-W>j nmap <C-k> <C-W>k nmap <C-h> <C-W>h nmap <C-l> <C-W>l " 正常模式下 alt+j,k,h,l 調整分割窗口大小 nnoremap <M-j> :resize +5<cr> nnoremap <M-k> :resize -5<cr> nnoremap <M-h> :vertical resize -5<cr> nnoremap <M-l> :vertical resize +5<cr> " 插入模式移動光標 alt + 方向鍵 inoremap <M-j> <Down> inoremap <M-k> <Up> inoremap <M-h> <left> inoremap <M-l> <Right> " IDE like delete inoremap <C-BS> <Esc>bdei nnoremap vv ^vg_ " 轉換當前行爲大寫 inoremap <C-u> <esc>mzgUiw`za " 命令模式下的行首尾 cnoremap <C-a> <home> cnoremap <C-e> <end> nnoremap <F2> :setlocal number!<cr> nnoremap <leader>w :set wrap!<cr> imap <C-v> "+gP vmap <C-c> "+y vnoremap <BS> d vnoremap <C-C> "+y vnoremap <C-Insert> "+y imap <C-V> "+gP map <S-Insert> "+gP cmap <C-V> <C-R>+ cmap <S-Insert> <C-R>+ exe 'inoremap <script> <C-V>' paste#paste_cmd['i'] exe 'vnoremap <script> <C-V>' paste#paste_cmd['v'] " 打開當前目錄 windows map <leader>ex :!start explorer %:p:h<CR> " 打開當前目錄CMD map <leader>cmd :!start<cr> " 打印當前時間 map <F3> a<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc> " 複製當前文件/路徑到剪貼板 nmap ,fn :let @*=substitute(expand("%"), "/", "\\", "g")<CR> nmap ,fp :let @*=substitute(expand("%:p"), "/", "\\", "g")<CR> " 設置切換Buffer快捷鍵" nnoremap <C-left> :bn<CR> nnoremap <C-right> :bp<CR> " }}}
首頁咱們設置了 leaderkey 爲逗號「,」,不要問爲何約定的就是它。別設置成空格就好了
注意「,e」和「,s」分別用編輯配置文件,刷新配置文件,後面的路徑要按你本身的狀況去寫,我默認使用了 vim 安裝目錄裏面的 vimrc
分屏編輯操做的時候常常要在不一樣的屏之間跳來跳去 「Ctrl + vim方向」設置跳轉方便順滑的切換,順便說下我我的的習慣是在當前tab下編輯一個項目的文件,若是要臨時維護其它項目就新開tab,每一個tab單獨編輯一個項目文件
後面還設置了一些和 Windows 默認編輯操做兼容的快捷鍵,好比:複製,粘貼
注意有個細節,由於 vim 裏面多行操做快捷鍵是 Ctrl + v 和 windows 粘貼衝突了,一個機智的作法是僅僅在 vim 插件模式設置 Ctrl 爲粘貼,正常模式 Ctril + v 進入多選模式,一箭雙鵰
插入模式下要移動光標 還得 ESC 一下進入插入模式,這樣太麻煩了,使用 「alt + vim方向」就簡單多了
插件方面根據我本身的工做內容和我的喜愛,選擇瞭如下幾個,所有使用 vundle 來管理:
NERDTree
Vim-multiple-cursors
Tabular
Airline
Ctrlp
NERDCommenter
Emmet
SnipMate
Fugitive
Neocomplete
具體配置我就不帖代碼了,能夠上git上參觀,下面大概解釋下每一個插件的用途
文件目錄樹管理,我通常設置成打開 vim 就啓動
if exists('g:NERDTreeWinPos') autocmd vimenter * NERDTree D:\repo endif
相似 sublime 多選,進入 visual 模式選擇文本 Ctrl+shif+n
便可一直選擇下一個匹配文本
對齊插件,文章末尾 gif 圖裏面有展現,visual 模式下選擇要對齊的多行文本,進入命令模式 :Tabularize /對齊符號<cr>
狀態欄美化插件,準備棄用了
相似IDE裏面的最近打開的文件,用於快速定位文件/Buffer
註釋插件,默認是快捷鍵是 <leader> c <SPACE>
用來快速寫 HTML
代碼片斷管理, 這個插件很早以前的那個版本不維護了,如今最新版的很是強大,不過有另外兩個依賴,默認是沒有任何內置的 snippet 的,若是須要樣版,能夠安裝 這個插件 須要自定義的話手動更改 snippets 目錄下的文件便可(其實就是個git倉庫,你能夠換成本身的)
Git 命令加強工具,在 vim 使用 git,狀態欄的分類名稱就是調用的這個插件的方法 fugitive#head()
自動補全插件,這個代碼實例插件是須要 lua 支持的,可能你須要手動編譯一個帶 lua 支持版本的 gvim,下篇文章 我將記錄下本身在 Windows 上編譯安裝的過程
什麼?你說爲啥不裝 YouCompleteMe,官方做者都不支持的插件就別折騰了吧,Neocomplete 這個實例插件對於個人狀況來講已經夠用了
經常使用方法這裏我只有一個,移除尾空格
" Function {{{ " Remove trailing whitespace when writing a buffer, but not for diff files. " From: Vigil " @see http://blog.bs2.to/post/EdwardLee/17961 function! RemoveTrailingWhitespace() if &ft != "diff" let b:curcol = col(".") let b:curline = line(".") silent! %s/\s\+$// silent! %s/\(\s*\n\)\+\%$// call cursor(b:curline, b:curcol) endif endfunction autocmd BufWritePre * call RemoveTrailingWhitespace() " }}}
No picture U say a ... ?
這個是動圖,不動戳大
還有一點沒說明,vimrc 裏面的一些 windows 獨有的設置我並無加一些判斷來兼容其它平臺,這個是我的喜愛而已,我會單獨分開維護不一樣平臺的配置文件,而不是所有放在一塊兒各類邏輯判斷