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 = "," "定义键 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 "快速打开vim配置文件:_vimrc nnoremap e :e ~/_vimrc "刷新配置 nnoremap r :source $MYVIMRC " 插入模式、正常模式按 Ctrl+u 快速转换为大写 inoremap viwUea nnoremap viwUe "Ctrl+d 复制本行并粘贴到一下行 nnoremap yyp" +q 快速退出vim nnoremap q :q inoremap q :q"插入模式快速到另一个字符右边,对于配对的符号(如括号)很有用 imap la "插入模式移动到下一行 imap o "移动到末尾 imap A" 添加“空格键”为代码折叠 set foldmethod=indent set foldlevel=99 nnoremapza"若打开分割窗口,可快速切换窗口 "快捷键提示:Ctrl+w w 切换窗口; Ctrl+w s 水平分割; Ctrl+w v 竖直分割 noremap h noremap j noremap k noremap l"buffer change nnoremap :bn nnoremap :bp nnoremap d :bd

最终效果
打开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 i :PlugInstall nnoremap u :PlugUpdate nnoremap c :PlugClean

重新打开gvim,按下 i 即可安装插件( 即逗号键):

添加插件配置,在_vimrc后添加即可。
"vim-colorschemes "默认主题 colorscheme 3dglasses"change-colorscheme nnoremap :PreviousColorScheme inoremap :PreviousColorScheme nnoremap :NextColorScheme inoremap :NextColorScheme nnoremap :RandomColorScheme inoremap :RandomColorScheme nnoremap :ShowColorScheme inoremap :ShowColorScheme"incsearch.vim map /(incsearch-forward) map ?(incsearch-backward) map g/ (incsearch-stay) let g:incsearch#auto_nohlsearch = 1 map n(incsearch-nohl-n) map N(incsearch-nohl-N) map *(incsearch-nohl-*) map #(incsearch-nohl-#) map g* (incsearch-nohl-g*) map g# (incsearch-nohl-g#) "使用暂时关闭高亮功能 nnoremap :nohlsearch "使用Ctrl+k统计匹配个数 nnoremap :%s///gn"f/t增强 let g:clever_f_ignore_case=1 let g:clever_f_smart_case=1 map ; (clever-f-repeat-forward) map ' (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 n :NERDTreeToggle 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 w (easymotion-bd-w) nmap w (easymotion-overwin-w) map f (easymotion-bd-f) nmap f (easymotion-overwin-f) nmap s (easymotion-overwin-f2) " Move to line map j (easymotion-bd-jk) nmap j (easymotion-overwin-line)" vim-smooth-scroll noremap :call smooth_scroll#up(&scroll*2, 0, 4) noremap :call smooth_scroll#down(&scroll*2, 0, 4)" Multip Cursor " Default key mapping let g:multi_cursor_use_default_mapping=0 let g:multi_cursor_next_key='' let g:multi_cursor_prev_key='' let g:multi_cursor_skip_key='' let g:multi_cursor_quit_key=''"expand region expand map K (expand_region_expand) map J (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 nnoremapt :TagbarToggle inoremapt :TagbarToggle"fzf settings nnoremap :FZF 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 :Ack"彩虹括号增强 let g:rainbow_active = 1 "0 if you want to enable it later via :RainbowToggle" tabular nnoremap l :Tab /\| nnoremap = :Tab /=" 复制增强 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的基本操作,相信会有很大的收获。
【Gvim的安装及配置】此配置也是经过一定的学习积累而成的,可以查看插件的Github以及_vimrc文件使用它,相信它会极大地提高我们的效率。由于内容太多太杂,另起一篇博客进行讲解,敬请期待。

    推荐阅读