Gvim的安裝及配置

同步發佈在個人博客:https://www.zhyong.cn/posts/876e/

Gvim是vim下的Windows版本,是一個GUI程序。Vim是從vi發展出來的一個文本編輯器,具有代碼補完、編譯及錯誤跳轉等方便編程的功能,在程序員中被廣泛使用。Vim的學習曲線陡峭,但是真正熟悉之後,會極大提高我們查看、編輯文本的效率。vim有豐富的插件,其自定義程度極高,可通過修改配置文件實現我們想要的功能。總之,熟悉vim後,會顛覆我們對傳統文本編輯器的認知,你會一次一次地被折服。

本篇文章是根據個人學習、使用Vim的經驗及個人習慣所寫的Gvim配置。適合有一定vim使用經驗的人,如果你對vim一無所知,推薦從無配置的vim開始學習,使用vim自帶的:vimtutor開始(可惜Gvim沒有)。但有一個vim插件yianwillis/vimcdoc: Vim 中文文檔計劃可幫助我們解決這個問題。本篇文章會介紹安裝這款插件,因此如果你是新手,可以一步步進行配置完成,然後點擊:help開始學習vim。

Gvim的下載、安裝

下載地址:Releases · vim/vim-win32-installer

我下載的版本是v8.1.1343,vim開發非常活躍,一般幾天就會有一個版本出來,下載最新即可,這裏附一下我的版本。 高速下載

下載後點擊一步步默認安裝即可,安裝類型可選擇完全安裝

選擇完全安裝

完成後點擊桌面的gVim 8.1,打開後界面如下:

進行下一步之前,瞭解一下vim配置文件的位置:位於家目錄下的.vimrc(Linux、Mac)和_vimrc(Windows),因此配置我們會在家目錄下的_vimrc下操作(若沒有則手動創建,無後綴名),最終配置文件是:C:\Users\youname\_vimrc,配置文件的註釋爲英文的雙引號:"

基礎配置

隱藏gvim菜單

由於習慣了Linux下的vim窗口,因此我們對gvim菜單等進行隱藏

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 隱藏GVIM菜單及設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 窗口大小
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

重新打開gVim 8.1:

通用設置

定義leader鍵(非常重要)、顯示狀態欄、顯示行號等實用功能。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 通用設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = "," "定義<leader>鍵
set nocompatible    "設置不兼容原始vi模式
filetype on     "設置開啓文件類型偵測
filetype plugin on  "加載對應文件類型插件
set noeb        "關閉錯誤提示
syntax enable       "開啓語法高亮功能
syntax on       "自動語法高亮
set t_Co=256        "開啓256色支持
set cmdheight=2     "設置命令行高度
set showcmd     "select模式下顯示選中的行數
set ruler       "總是顯示光標的位置
set laststatus=2    "總是顯示狀態欄
set number      "開啓行號顯示
set cursorline      "高亮顯示當前行
set whichwrap+=<,>,h,l  "設置光標鍵跨行
set virtualedit=block,onemore   "允許光標出現在最後一個字符的後面

代碼縮進與排版

默認製表符爲8個空格,通過配置改爲4個,設置智能縮進等

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代碼縮進與排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set autoindent      "設置自動縮進
set cindent     "設置使用C/C++語言的自動縮進方式
set cinoptions=g0,:0,N-s,(0 "設置使用C/C++語言的具體縮進方式
set smartindent     "智能選擇對齊方式
filetype indent on  "自適應不同語言的智能縮進
set expandtab       "將製表符擴展爲空格
set tabstop=4       "設置編輯時製表符所佔的空格數
set shiftwidth=4    "設置格式化時製表符佔用的空格數
set softtabstop=4       "設置4個空格爲製表符
set smarttab        "在行和段開始處使用製表符
"set nowrap     "禁止折行
set backspace=2     "使用回車鍵正常處理indent.eol,start等

代碼相關

設置代碼補全、代碼摺疊

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代碼補全
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set wildmenu        "vim自身命令行模式智能補全
set completeopt-=preview    "補全時不顯示窗口,只顯示補全列表

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"代碼摺疊
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set foldmethod=syntax       "設置基於語法進行代碼摺疊
set nofoldenable            "關閉代碼摺疊

緩存及編碼

設置不自動備份,默認設置爲UTF8編碼等

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 緩存設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nobackup        "設置不備份
set noswapfile      "禁止生成臨時文件
set autoread        "文件在vim之外修改過,自動重新載入
set autowrite       "設置自動保存
set confirm         "在處理未保存或只讀文件時,彈出確認

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 編碼設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set langmenu=zh_CN.UTF-8
set helplang=cn
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030

根據個人習慣設置

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 優化設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"映射 esc 鍵爲 jj
inoremap jj <Esc>
"快速打開vim配置文件:_vimrc
nnoremap <leader>e :e ~/_vimrc<cr>
"刷新配置
nnoremap <leader>r :source $MYVIMRC<cr>
" 插入模式、正常模式按 Ctrl+u 快速轉換爲大寫
inoremap <c-u> <esc>viwUea
nnoremap <c-u> viwUe
"Ctrl+d 複製本行並粘貼到一下行
nnoremap <c-d> yyp

" <leader>+q 快速退出vim
nnoremap <leader>q :q<cr>
inoremap <leader>q <Esc>:q<cr>

"插入模式快速到另一個字符右邊,對於配對的符號(如括號)很有用
imap <c-a> <Esc>la
"插入模式移動到下一行
imap <c-d> <Esc>o
"移動到末尾
imap <c-e> <Esc>A

" 添加“空格鍵”爲代碼摺疊
set foldmethod=indent
set foldlevel=99
nnoremap <space> za

"若打開分割窗口,可快速切換窗口
"快捷鍵提示:Ctrl+w w 切換窗口; Ctrl+w s 水平分割; Ctrl+w v 豎直分割
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

"buffer change
nnoremap <c-n> :bn<cr>
nnoremap <c-p> :bp<cr>
nnoremap <leader>d :bd<cr>

最終效果

打開gvim,按下,e打開gvim配置文件,界面如下,其餘快捷鍵可自行實踐。

自動高亮顯示

插件安裝及配置

由於安裝插件需要一些工具如 rgfzf 等,我們提前在 d 盤根目錄下新建 bin 文件夾,並將 D:\bin 文件夾添加到系統環境變量中(自行百度)。

安裝 vimplug 插件管理器

Github地址:junegunn/vim-plug: Minimalist Vim Plugin Manager

下載plug.vim到gvim安裝目錄:C:\Program Files\Vim\vim81\autoload即可。

這樣vimplug插件管理器就安裝成功了!

插件配置文件

插件的作用都已經添加註釋,自行查看即可。

_vimrc文件最後添加:

" vim-plug
" ******************************BEGIN******************************
call plug#begin('~/.vim/plugged')
"中文vim入門,不需要可註釋掉
Plug 'yianwillis/vimcdoc'
"vim-colorschemes
Plug 'flazz/vim-colorschemes'
"change scheme
Plug 'chxuan/change-colorscheme'

"incsearch
Plug 'haya14busa/incsearch.vim'
"強化f/t
Plug 'rhysd/clever-f.vim'

"vim-airline
Plug 'vim-airline/vim-airline'
"vim-airline themes
Plug 'vim-airline/vim-airline-themes'

" nerdtree
Plug 'scrooloose/nerdtree',{'on':'NERDTreeToggle'}
"nerdtree-git-plugin
Plug 'Xuyuanp/nerdtree-git-plugin'

"vim-easymotion
Plug 'easymotion/vim-easymotion'

"vim auto pair
Plug 'jiangmiao/auto-pairs'

"vim-smooth_scroll
Plug 'terryma/vim-smooth-scroll'

"vim-surround
Plug 'tpope/vim-surround'

"vim-commentary
Plug 'tpope/vim-commentary'

" multiple-cursors
Plug 'terryma/vim-multiple-cursors'

"vim expand region
Plug 'terryma/vim-expand-region'

"tarbar
Plug 'majutsushi/tagbar'

"vim-endwise
Plug 'tpope/vim-endwise'

"vim start page
Plug 'mhinz/vim-startify'

"fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf'}

"根據縮進摺疊代碼
Plug 'tmhedberg/SimpylFold'

"文本搜索rg
Plug 'mileszs/ack.vim'

"彩虹括號增強
Plug 'luochen1990/rainbow'

"對齊插件
Plug 'godlygeek/tabular'

"語法檢查
Plug 'vim-syntastic/syntastic'

"複製增強
Plug 'machakann/vim-highlightedyank'

"快速打開大文件
Plug 'vim-scripts/LargeFile'
call plug#end()
" ******************************END******************************

" VimPlug快捷鍵:安裝、更新、刪除插件
nnoremap <leader><leader>i :PlugInstall<cr>
nnoremap <leader><leader>u :PlugUpdate<cr>
nnoremap <leader><leader>c :PlugClean<cr>

重新打開gvim,按下<leader> <leader> i 即可安裝插件(<leader> 即逗號鍵):

安裝插件過程

添加插件配置,在_vimrc後添加即可。

"vim-colorschemes
"默認主題
colorscheme 3dglasses

"change-colorscheme
nnoremap <silent> <F9> :PreviousColorScheme<cr>
inoremap <silent> <F9> <esc> :PreviousColorScheme<cr>
nnoremap <silent> <F10> :NextColorScheme<cr>
inoremap <silent> <F10> <esc> :NextColorScheme<cr>
nnoremap <silent> <F11> :RandomColorScheme<cr>
inoremap <silent> <F11> <esc> :RandomColorScheme<cr>
nnoremap <silent> <F12> :ShowColorScheme<cr>
inoremap <silent> <F12> <esc> :ShowColorScheme<cr>


"incsearch.vim
map /  <Plug>(incsearch-forward)
map ?  <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)
let g:incsearch#auto_nohlsearch = 1
map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)
"使用<Esc><Esc>暫時關閉高亮功能
nnoremap <Esc><Esc> :<C-u>nohlsearch<CR>
"使用Ctrl+k統計匹配個數
nnoremap <silent> <C-c> :%s///gn<CR>


"f/t增強
let g:clever_f_ignore_case=1
let g:clever_f_smart_case=1
map ; <Plug>(clever-f-repeat-forward)
map ' <Plug>(clever-f-repeat-back)


"vim-airline
let g:airline_theme="onedark"
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
" let g:airline#extensions#tabline#left_sep = ' '   
" let g:airline#extensions#tabline#left_alt_sep = '|' "tabline中未激活buffer兩端的分隔字符      
if !exists('g:airline_symbols')
    let g:airline_symbols = {}
endif
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.whitespace = 'Ξ'
let g:airline_symbols.branch = '⎇'
let g:airline_section_b='%{strftime("%c")}'   "使用時顯示當前時間
" let g:airline_section_y='BN:%{bufnr("%")}'  "右下角顯示bffer序號
" let g:airline_mode_map = {
  " \ '__' : '-',
  " \ 'c'  : 'C',
  " \ 'i'  : 'I',
  " \ 'ic' : 'I',
  " \ 'ix' : 'I',
  " \ 'n'  : 'N',
  " \ 'ni' : 'N',
  " \ 'no' : 'N',
  " \ 'R'  : 'R',
  " \ 'Rv' : 'R',
  " \ 's'  : 'S',
  " \ 'S'  : 'S',
  " \ '' : 'S',
  " \ 't'  : 'T',
  " \ 'v'  : 'V',
  " \ 'V'  : 'V',
  " \ '' : 'V',
  " \ }

"nerdtree
"close vim if only nerdtree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"open nerdtree automatically when vim starts with a dictory
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
"快捷鍵
map <leader>n :NERDTreeToggle<cr>
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'

"nerdtree-git-plugin
let g:NERDTreeIndicatorMapCustom = {
            \ "Modified"  : "✹",
            \ "Staged"    : "✚",
            \ "Untracked" : "✭",
            \ "Renamed"   : "➜",
            \ "Unmerged"  : "═",
            \ "Deleted"   : "✖",
            \ "Dirty"     : "✗",
            \ "Clean"     : "✔︎",
            \ 'Ignored'   : '☒',
            \ "Unknown"   : "?"
            \ }

"vim-easymotion
let g:EasyMotion_smartcase=1
map <leader>w <Plug>(easymotion-bd-w)
nmap <leader>w <Plug>(easymotion-overwin-w)
map <leader>f <Plug>(easymotion-bd-f)
nmap <leader>f <Plug>(easymotion-overwin-f)
nmap <leader>s <Plug>(easymotion-overwin-f2)
" Move to line
map <Leader>j <Plug>(easymotion-bd-jk)
nmap <Leader>j <Plug>(easymotion-overwin-line)

" vim-smooth-scroll
noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 0, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 0, 4)<CR>

" Multip Cursor
" Default key mapping
let g:multi_cursor_use_default_mapping=0
let g:multi_cursor_next_key='<C-y>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'

"expand region expand
map K <Plug>(expand_region_expand)
map J <Plug>(expand_region_shrink)
let g:expand_region_text_objects = {
            \ 'iw'  :0,
            \ 'iW'  :0,
            \ 'i"'  :0,
            \ 'i''' :0,
            \ 'i]'  :1,
            \ 'ib'  :1,
            \ 'iB'  :1,
            \ 'il'  :0,
            \ 'ip'  :1,
            \ 'ie'  :0,
            \ }"

"tarbar
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_width = 30
nnoremap <silent> <leader>t :TagbarToggle<cr>
inoremap <silent> <leader>t <esc> :TagbarToggle<cr>

"fzf settings
nnoremap <Tab> :FZF <cr>
function! s:build_quickfix_list(lines)
    call setqflist(map(copy(a:lines), '{ "filename": v:val  }'))
    copen
    cc
endfunction
let g:fzf_action = {
            \ 'ctrl-q': function('s:build_quickfix_list'),
            \ 'ctrl-t': 'tab split',
            \ 'ctrl-x': 'split',
            \ 'ctrl-v': 'vsplit' }
"Default fzf layout
let g:fzf_layout = { 'down': '~40%'  }
let g:fzf_colors =
            \ { 'fg':      ['fg', 'Normal'],
            \ 'bg':      ['bg', 'Normal'],
            \ 'hl':      ['fg', 'Comment'],
            \ 'fg+':     ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
            \ 'bg+':     ['bg', 'CursorLine', 'CursorColumn'],
            \ 'hl+':     ['fg', 'Statement'],
            \ 'info':    ['fg', 'PreProc'],
            \ 'border':  ['fg', 'Ignore'],
            \ 'prompt':  ['fg', 'Conditional'],
            \ 'pointer': ['fg', 'Exception'],
            \ 'marker':  ['fg', 'Keyword'],
            \ 'spinner': ['fg', 'Label'],
            \ 'header':  ['fg', 'Comment'] }
"代碼摺疊
set foldmethod=indent
let g:SimpylFold_docstring_preview=1

"Ack和rg
let g:ackprg = 'rg '
nnoremap <C-s> :Ack<space>

"彩虹括號增強
let g:rainbow_active = 1 "0 if you want to enable it later via :RainbowToggle

" tabular
nnoremap <leader>l :Tab /\|<cr>
nnoremap <leader>= :Tab /=<cr>

" 複製增強
let g:highlightedyank_highlight_duration = 1000
let g:highlightedyank_highlight_duration = -1

由於安裝了fzf文件模糊搜索插件和rg文本搜索插件,因此我們需要下載fzf和rg的可執行文件到D:\bin目錄下。
fzf官方下載 rg官方下載 ctags高速下載

此時D:\bin目錄下應該是這樣的:

D:\bin\rg.exe
D:\bin\fzf.exe
D:\bin\ctags.exe

此時進入vim按下tab鍵則使用fzf模糊搜索。Ctrl+s進行文本搜索。

配圖如下:

修改字體

從上圖可以看出,字體看起來非常費力,因此我們可以安裝好看的SourceCodeProForPowerline字體。

下載地址:fonts/Source Code Pro for Powerline.otf at master · powerline/fonts

下載後安裝即可。

設置vim的字體爲SourceCodeProForPowerline

打開gvim,普通模式輸入命令::set guifont=* 調出字體窗口,選擇即可,並且可設置合適的字體大小。

然後通過:set guifont命令查看字體設置,但這僅僅是暫時的,重新打開Gvim字體設置會失效,我們可以在_vimrc末尾添加。

"設置字體 fonts
set guifont=Source_Code_Pro_for_Powerline:h12:cANSI

此時配置的Gvim非常強大且美觀了。

配置使用說明

上述全部配置文件:vimrc/_vimrc最新 at master

通過這些配置,我們就可以使用豪華版 gvim 了。

對於新手,可以打開:help進行學習vim的基本操作,相信會有很大的收穫。

此配置也是經過一定的學習積累而成的,可以查看插件的Github以及_vimrc文件使用它,相信它會極大地提高我們的效率。由於內容太多太雜,另起一篇博客進行講解,敬請期待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章