多是 Windows 下最漂亮的 Gvim 配置了

原文: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 的默認界面,咱們將從這裏開始一步步的學習和配置編程語言

gvim-default

配置 _vimrc

因爲 vimrc 裏面會有不少的配置項,爲了不混亂,我大概按本身的使用習慣分紅了幾個小組:編輯器

  • Startup - 編輯器啓動時須要添加的一些配置

  • General - 通用配置

  • Lang & Encoding - 語言和編碼

  • GUI - 界面

  • Format - 基本的代碼格式

  • Keymap - 通用的快捷鍵

  • Plugin - 插件相關(包括和當前插件相關的配置和快捷鍵等)

  • Function - vimrc 裏面用到的經常使用方法

Startup

" Startup {{{
filetype indent plugin on


" vim 文件摺疊方式爲 marker
augroup ft_vim
    au!

    au FileType vim setlocal foldmethod=marker
augroup END
" }}}

設置 vim 相關文件打開後默認摺疊方式爲 marker,約定俗成的用三個花括號註釋包裹起來,這樣在你打開配置文件的時候 vim 就會幫你摺疊起來,配置文件看起來就簡潔多了,如圖:

vim-fold-config

General

" 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

" 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

" 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 平臺最漂亮的等寬字體了

此時你的編輯器應該好看了不少:

more-beauty-vim

Format

" Format {{{
set autoindent
set smartindent
set tabstop=4
set expandtab
set softtabstop=4
set foldmethod=indent
syntax on
" }}}

這個設置容易引發爭議,我本身是這麼個設置,你們按我的喜愛就好了,反正我是不建議使用 tab 的,對代碼格式有強迫症的人通常都會設置 foldmethod=indent

Keymap

能夠說快捷鍵是每一個編輯器必備的功能,科學的設置快捷鍵能很大程度的提升效率。快捷鍵的設置要遵循一個規則:儘可能不要修改系統默認配置的快捷鍵,非要設置的話選擇好相應的模式

" 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方向」就簡單多了

Plugin

插件方面根據我本身的工做內容和我的喜愛,選擇瞭如下幾個,所有使用 vundle 來管理:

  • NERDTree

  • Vim-multiple-cursors

  • Tabular

  • Airline

  • Ctrlp

  • NERDCommenter

  • Emmet

  • SnipMate

  • Fugitive

  • Neocomplete

具體配置我就不帖代碼了,能夠上git上參觀,下面大概解釋下每一個插件的用途

NERDTree

文件目錄樹管理,我通常設置成打開 vim 就啓動

if exists('g:NERDTreeWinPos')
    autocmd vimenter * NERDTree D:\repo
endif

Vim-multiple-cursors

相似 sublime 多選,進入 visual 模式選擇文本 Ctrl+shif+n 便可一直選擇下一個匹配文本

mul-cur

Tabular

對齊插件,文章末尾 gif 圖裏面有展現,visual 模式下選擇要對齊的多行文本,進入命令模式 :Tabularize /對齊符號<cr>

Airline

狀態欄美化插件,準備棄用了

Ctrlp

相似IDE裏面的最近打開的文件,用於快速定位文件/Buffer

NERDCommenter

註釋插件,默認是快捷鍵是 &lt;leader&gt; c &lt;SPACE&gt;

Emmet

用來快速寫 HTML

emmet

SnipMate

代碼片斷管理, 這個插件很早以前的那個版本不維護了,如今最新版的很是強大,不過有另外兩個依賴,默認是沒有任何內置的 snippet 的,若是須要樣版,能夠安裝 這個插件 須要自定義的話手動更改 snippets 目錄下的文件便可(其實就是個git倉庫,你能夠換成本身的)

snipmate

Fugitive

Git 命令加強工具,在 vim 使用 git,狀態欄的分類名稱就是調用的這個插件的方法 fugitive#head()

Neocomplete

自動補全插件,這個代碼實例插件是須要 lua 支持的,可能你須要手動編譯一個帶 lua 支持版本的 gvim,下篇文章 我將記錄下本身在 Windows 上編譯安裝的過程

什麼?你說爲啥不裝 YouCompleteMe,官方做者都不支持的插件就別折騰了吧,Neocomplete 這個實例插件對於個人狀況來講已經夠用了

Function

經常使用方法這裏我只有一個,移除尾空格

" 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 ... ?

complete-vimrc

這個是動圖,不動戳大

gif-show-vim

結語

還有一點沒說明,vimrc 裏面的一些 windows 獨有的設置我並無加一些判斷來兼容其它平臺,這個是我的喜愛而已,我會單獨分開維護不一樣平臺的配置文件,而不是所有放在一塊兒各類邏輯判斷

引用

完整配置文件

相關文章
相關標籤/搜索