0%

Gvim的安装及配置

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菜单等进行隐藏

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 隐藏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键(非常重要)、显示状态栏、显示行号等实用功能。

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 通用设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
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个,设置智能缩进等

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代码缩进与排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
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等

代码相关

设置代码补全、代码折叠

_vimrc
1
2
3
4
5
6
7
8
9
10
11
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代码补全
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set wildmenu "vim自身命令行模式智能补全
set completeopt-=preview "补全时不显示窗口,只显示补全列表

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"代码折叠
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set foldmethod=syntax "设置基于语法进行代码折叠
set nofoldenable "关闭代码折叠

缓存及编码

设置不自动备份,默认设置为UTF8编码等

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 缓存设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
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

根据个人习惯设置

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 优化设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"映射 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文件最后添加:

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
" 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后添加即可。

_vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
"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序号

"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目录下应该是这样的:

1
2
3
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末尾添加。

_vimrc
1
2
"设置字体 fonts
set guifont=Source_Code_Pro_for_Powerline:h12:cANSI

此时配置的Gvim非常强大且美观了。

配置使用说明

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

通过这些配置,我们就可以使用豪华版 gvim 了。

对于新手,可以打开:help进行学习vim的基本操作,相信会有很大的收获。

此配置也是经过一定的学习积累而成的,可以查看插件的Github以及_vimrc文件使用它,相信它会极大地提高我们的效率。由于内容太多太杂,另起一篇博客进行讲解,敬请期待。