windows10下安装、配置vim及YCM安装
久仰vim编辑器之神的大名,最近出于好奇,在windows10下折腾了一下,在此记录一下历程。https://www.xjx100.cn/news/651149.html?action=onClick
文章目录
- 1. windows10下的vim安装和配置
-
- 1.1 安装vim
- 1.2. 基础设置
- 1.3. 插件管理插件Vundle
- 1.4. 主题插件
- 1.5. 底部栏增强插件
- 1.6. 格式化代码、彩虹括号、缩进线突出显示
- 1.7. 自动补全神器YCM(YouCompleteMe)
- 1.8. 目录树
- 2. 后话
- 3. vim常用命令
-
- 3.1. 一般模式
- 3.2. 编辑模式
- 3.3 命令模式
1. windows10下的vim安装和配置
1.1 安装vim
去官网下载windows下的.exe可执行文件,安装其它软件一样进行安装。安装完成后打开,界面类似下面(网上的图,侵删):
第一眼看上去太素(chou)雅(lou)了,没有一点现代编辑器的气息,作为一个颜控受不了。也没有高亮显示,没有行号,不能自动补全等等缺点(虽然自带了一些主题)。经过学习、摸索,最后自己配置的编辑器好看多了,许多功能也加上了,先展示一下:
下面开始记录配置过程。找到vim的安装目录,里面有一个名为_vimrc的文件:
vim的配置和一些设置都是在这个文件里面进行的,.un~文件是vim的undofile和备份文件,可以让你在关闭文件后再次打开时还可以撤销上次的更改。
1.2. 基础设置
- 设置显示字体:在_vimrc中加入语句
set guifont=Consolas\ for\ Powerline\ FixedD:h14
,等于号的右边和冒号之间是电脑上安装的某个字体的名字,注意字体中有空格的话,需要使用反斜杠\来对空格进行转义。冒号之后设置的是字体的大小。也可以设置别的字体,我设这个字体是为了airline插件,具体见讲airline插件那一节。 - 光标有关设置:
" 光标设置成块状且禁止闪烁
set gcr=a:block-blinkon0
" 显示光标当前位置,右下角可看到当前行和列数
set ruler
" 高亮显示当前行/列
set cursorline
set cursorcolumn
" 高亮显示搜索结果
set hlsearch
- 显示行号:
set number
- 语法高亮、缩进等设置:
" 开启语法高亮功能
syntax enable
" 允许用指定语法高亮配色方案替换默认方案
syntax on
" 自适应不同语言的智能缩进
filetype indent on
" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 设置格式化时制表符占用空格数
set shiftwidth=4
" 让vim把连续数量的空格视为一个制表符
set softtabstop=4
- 补全成对符号
" 补全括号
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR>}<ESC>O
inoremap < <><ESC>i
缺点是有时候只需要左边时,也是两个都打出来。
- 备份和历史记录:
" 禁止备份
set nobackup
" 保留历史记录
set history=500
不禁止备份的话,编辑文件就会生成一个同名的最后加上一个~符号的文件,看着太糟心。
1.3. 插件管理插件Vundle
刚才进行了基础设置,继续配置的话最好是安装插件。安装插件之前,先安装一个管理插件的工具Vundle,以此来方便的管理插件,当然另外有名的插件管理工具还有Pathogen等。安装vim完成以后,一般在C盘的用户文件夹->用户名里面找到vimfiles文件夹。比如我的路径,在WXH文件夹里就有vimfiles文件夹:
打开命令行,从github上克隆下来Vundle:git clone https://github.com/VundleVim/Vundle.vim.git ~/vimfiles/bundle/Vundle.vim
放在vimfiles文件夹里。然后打开_vimrc文件,加入如下配置:
" vundle插件环境设置
filetype off
set rtp+=~/vimfiles/bundle/Vundle.vim
" vundle管理的插件列表必须位于vundle#begin()和vundle#end()之间
call vundle#begin()
" 插件管理插件
Plugin 'VundleVim/Vundle.vim'
" 主题
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
Plugin 'morhetz/gruvbox'
Plugin 'vim-airline/vim-airline-themes'
" 自动补全
Plugin 'Valloric/YouCompleteMe'
" 底部栏增强
" Plugin 'Lokaltog/vim-powerline'
Plugin 'vim-airline/vim-airline'
" 目录树
Plugin 'scrooloose/nerdtree'
" 格式化代码
Plugin 'Chiel92/vim-autoformat'
" 显示缩进线
Plugin 'nathanaelkane/vim-indent-guides'
" 彩虹括号
Plugin 'kien/rainbow_parentheses.vim'" 插件列表结束
call vundle#end()
filetype plugin indent on
其实这里我是希望将插件都放到vimfiles文件夹里面的(把vimfiles文件夹里原来的东西都删了),可是这样配置以后,插件都还是在新建的.vim文件夹里,有大佬告知原因吗?不胜感激。vundle可以安装、卸载插件。安装插件只需在_vimrc文件的vundle#begin()和vundle#end()之间加入语句:Plugin 插件名
,比如要安装gruvbox主题,输入:Plugin 'morhetz/gruvbox'
。保存编辑,然后打开vim,输入::BundleInstall
然后回车,就会看到(图中是我已经安装的插件):
左下角的Done!说明插件装好了,正在装的话该位置会显示Processing …Vundle默认从github上下载插件。vim插件基本都支持而且很多都建议使用Vundle安装。查看插件列表在vim中输入::BundleList
,删除插件则在_vimrc中注释掉或者删掉该插件所对应的行,保存,然后在vim中输入:BundleClean
,然后回车,出现:
输入y表示确定删除,n表示放弃。
1.4. 主题插件
vim有许许多多的主题,比较经典的有solarized和molokai,在_vimrc中输入:
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
保存,然后在vim中输入::BundleInstall
,回车,即可安装,两个主题的界面展示:
最近被大佬推荐gruvbox主题也挺好看的。就是前面展示的图,在_vimrc中输入:Plugin 'morhetz/gruvbox'
。保存,然后在vim中输入::BundleInstall
,回车,即可安装。还有很多别的主题都可以在网上找到。安装好以后,在_vimrc中设置主题:
" 背景也可以设置成light
set background=dark
colorscheme solarized
" colorscheme molokai
" colorscheme gruvbox
把不用的主题注释掉,看腻了可以换换。
1.5. 底部栏增强插件
以前使用的是powerline,在_vimrc中输入:Plugin 'Lokaltog/vim-powerline'
,保存,然后在vim中输入::BundleInstall
,回车,即可安装。现在发现一个更好的替代品airline,更好(hua)看(li)一(hu)点(shao),还有buffer功能。在_vimrc中输入:Plugin 'vim-airline/vim-airline'
保存,然后在vim中输入::BundleInstall
,回车,即可安装。这个插件需要先安装打powerline补丁的字体,不然无法像前面一样显示三角形,状态栏像这样:
目前,我只知道windows下可以显示三角形字体有Consolas Powerline,把4个字体都下下来安装,在_vimrc中将字体设置为Consolas for Powerline FixedD(前面已设置过)。可以在https://github.com/powerline/fonts网站上下Linux系统下打补丁的字体。为了防止乱码,先加入以下配置:
" 设置编码格式
set encoding=utf-8
set langmenu=zh_CN.UTF-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileencoding=utf-8
" 解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 设置中文提示
language messages zh_CN.utf-8
" 设置双字宽显示,防止有些字符显示不出来
set ambiwidth=double
然后再加入如下配置:
" airline设置
" 这个是安装字体后 必须设置此项"
let g:airline_powerline_fonts=1
" 底部栏的主题
let g:airline_theme="molokai"
" 打开tabline功能,方便查看Buffer和切换
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
if !exists('g:airline_symbols')let g:airline_symbols = {}
endiflet 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.branch = '⭠'
let g:airline_symbols.readonly = '⭤'
let g:airline_symbols.linenr = '⭡'
如果正确安装字体,最后7行显示的是这样的:
否则类似于这样:
再需要注意的是设置底部栏主题:let g:airline_theme="molokai"
需要安装airline主题插件,语法:Plugin 'vim-airline/vim-airline-themes'
。默认主题灰不溜秋的,安装主题插件换一个多姿多彩的。
1.6. 格式化代码、彩虹括号、缩进线突出显示
有时候用vim看代码、编写代码,需要一些辅助。格式化代码是必需的,可以安装autoformat插件,语法:Plugin 'Chiel92/vim-autoformat'
。这个插件只是一个框架,安装好以后还需要安装格式化程序,可以是clang-format、autopep8等。这里使用开源的AStyle项目,到AStyle网站上去下载压缩包,并解压。里面有个bin文件夹,该文件夹有个AStyle.exe文件,是供windows下使用的。把该路径加入环境变量中,然后在_vimrc中加入以下配置:
" 格式化代码风格设置:C为ANSI
let g:formatdef_ansi='"astyle --style=allman --pad-oper"'
let g:formatters_c=['ansi']
let g:formatters_cpp=['ansi']
au BufWrite * :Autoformat
"设置快捷键F5自动格式化代码并保存
noremap <F5> :Autoformat<CR>:w<CR>
在一般模式下,按下F5即可格式化C代码。
有的文件中,有时候好几个括号嵌套,不好辨认,可以借助彩虹括号插件。安装:Plugin 'kien/rainbow_parentheses.vim'
,加入以下配置:
" 彩虹括号设置
let g:rbpt_colorpairs = [\ ['brown', 'RoyalBlue3'],\ ['Darkblue', 'SeaGreen3'],\ ['darkgray', 'DarkOrchid3'],\ ['darkgreen', 'firebrick3'],\ ['darkcyan', 'RoyalBlue3'],\ ['darkred', 'SeaGreen3'],\ ['darkmagenta', 'DarkOrchid3'],\ ['brown', 'firebrick3'],\ ['gray', 'RoyalBlue3'],\ ['black', 'SeaGreen3'],\ ['darkmagenta', 'DarkOrchid3'],\ ['Darkblue', 'firebrick3'],\ ['darkgreen', 'RoyalBlue3'],\ ['darkcyan', 'SeaGreen3'],\ ['darkred', 'DarkOrchid3'],\ ['red', 'firebrick3'],\ ]
" 开启16对括号匹配
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
缩进线显示安装:Plugin 'nathanaelkane/vim-indent-guides'
,配置:
" 显示缩进线设置
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_auto_colors = 0
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 1
let g:indent_guides_space_guides = 1
1.7. 自动补全神器YCM(YouCompleteMe)
经过之前的配置,vim颜值提高了很多,现在提高点内涵——自动补全。说到vim自动补全,就不得不说大名鼎鼎的YCM(YouCompleteMe)了。几乎是vim最复杂的插件,以前不支持windows的,现在支持windows了。安装需要准备一些工具。首先是CMake,安装之后加入环境变量。然后是Visual Studio Build Tools 2017,好像还要下一个visual studio 2019(选C++桌面开发),因为我安装的时候提示我没有安装VS2019(反正安装的时候提示缺少啥去装就可以了)。最后注意的是,YCM安装依赖python,而vim对python版本有着几乎变态的要求,不止是大版本要符合,小版本也要契合。首先在vim里面输入::version
,查看vim版本和支持的功能:
如图所示,python和python3前面有加号,说明支持python2和python3。继续往下翻,看到:
图中可以看到支持的具体的版本,python2支持python2.7.x,python3支持python3.6.x,因为YCM官网上说已经抛弃了python2,所以安装python3.6。安装好以后,在vim中输入::echo has('python')||has('python3')
如果输出是1,说明python版本装对了,如果是0,说明版本不对,我原来有python3.6.9,但是执行上面命令,输出为0,换成python3.6.8就可以了。
ok,这些准备工作做好以后,使用vundle安装(官方也推荐使用它安装),_vimrc输入:Plugin 'Valloric/YouCompleteMe'
,保存,进入vim输入:BundleInstall
,就在安装了。这个时间可能会长一点,耐心等待。好了以后,可能会在底部栏出现类似于:the ycmd serve shut down(restart with......)
的信息(没出现更好)。解决方法为打开命令行,切换到YouCompleteMe文件夹,输入:python3 install.py
,运行好以后就不会出现上面的提示了。有时候会出现下载不完整的现象,可以在YouCompleteMe文件夹下的cmd中输入git submodule update –init –recursive
来检查是否下载完整,我就遇到过等了好长时间,结果提示YouCompleteme unavailable : no module named future
,就是库没有下载完整。输入git submodule update –init –recursive
继续下载。如果还不行,直接克隆:git clone –recursive https://github.com/Valloric/YouCompleteMe.git
到bundle目录下。
然后就可以安装了,还是在YouCompleteMe文件夹,如果要编译支持C语言的补全,输入:python install.py --clangd-completer
,等一会,安装完成就好。如果不用支持C,就输入:python install.py
。可以在YCM官方github(链接上面给过来)上查看你需要补全的语言的安装方法,也可以一劳永逸,输入:python3 install.py --all
来安装所有支持的语言的自动补全(go,C#,Java,C等等),但没有必要,要装很多依赖,而且很多用不上。我安装的是支持C语言的补全,安装好以后,加入如下配置:
" YCM设置
let g:ycm_global_ycm_extra_conf='C:/Users/WXH/.ycm_extra_conf.py'
" 允许vim加载.ycm_extra_conf.py文件,不再提示
let g:ycm_confirm_extra_conf=0
" 在接受补全后不分裂出一个窗口显示接受的项
set completeopt-=preview
" 补全功能在注释中同样有效
let g:ycm_complete_in_comments=1
" 从第一个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=1
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
" 开启YCM标签补全引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=1
" 自动补全快捷键设置为CTRL+Z
let g:ycm_key_invoke_completion='<c-z>'
需要注意的是,.ycm_extra_conf.py文件在YouCompleteMe\third_party\ycmd文件夹下。在_vimrc中的路径一定要正确。YCM默认补全快捷键是Ctrl+space。最终效果如下:
1.8. 目录树
目录树插件安装:Plugin 'scrooloose/nerdtree'
,保存,然后vim输入:BundleInstall
,加入配置:
" 目录树设置
nmap <silent> <c-n> :NERDTreeToggle<CR>
在一般模式下,按Ctrl+n即可打开目录树,效果如图:
2. 后话
经过上述的配置,vim的可用性提高了很多,不管是写代码还是干别的。但水平有限,还有太多功能没有涉及,比如说多光标、git有关的配置等等,上述插件也只是vim插件中的九牛零点零零零零一毛,更多插件可以参考Vim Awesome。vim强大之处在于其本身具有无限扩展的可能,理论上只有想不到,没有做不到。经过上述配置,缺点是明显感觉vim打开变慢了(相对而言,但还是比vscode快),可能有不合理或者冗余的配置。才疏学浅,vim还没有入门,希望继续学习。
3. vim常用命令
vim有三种基本模式:一般模式、编辑模式和命令模式。下面简单介绍一下三种模式及其最最常用的功能。
3.1. 一般模式
以vim打开一个文件就直接进入一般模式(就是默认的模式)。在该模式中, 可以使用『上下左右』按键来移动光标,也可以删除文件的某一行或者某个字符,还可以进行复制、粘贴操作。一些命令如下表:
命令 | 含义 |
---|---|
h,j,k,l | 相当于键盘的左(←),下(↓),上(↑),右(→)按键功能。如果要移动n个字符的话,可以输入nh或n←,n为一个数字 |
home键(或数字0)、end键(或$符号) | 将光标移到该行的首、尾处 |
Ctrl+f和Ctrl+b | 相当于PgDn键和PgUp,表示屏幕向下、上移动一页 |
G | 光标移动到文件末尾行的首个非空字符,可以使用nG移动到该文件的第n行的首个非空字符 |
gg | 光标移动到文件首行的首个非空字符,相当于1G |
n+enter | 光标向下移动n行 |
/word和?word | 向光标之下、之上寻找word字符串 |
:n1,n2s/word1/word2/g | 字符串替换。在第 n1与n2行之间寻找 word1 这个字符串,并将该字符串替换为 word2 |
:1,$s/word1/word2/g | 字符串替换。在第1与最后一行之间寻找 word1 这个字符串,并将该字符串替换为 word2 |
:1,$s/word1/word2/gc | 字符串替换。在第1与最后一行之间寻找 word1 这个字符串,并在替换该字符串之前显示word2,以使用户确认是否替换 |
x和X | x为向后删除一个字符,X为向前删除一个字符,可以使用nx,nX向后、向前删除连续的n个字符 |
dd,ndd | dd为删除光标所在的一整行,ndd为向下删除光标所在的n行 |
yy和nyy | yy复制光标所在行,nyy表示从光标所在行算起,向下复制n行。 |
p和P | p表示在光标下一行粘贴复制的内容,P表示在光标上一行粘贴复制内容 |
u | 复原前一个动作,相当于撤销上一步 |
Ctrl+r | 重复上一个动作 |
3.2. 编辑模式
在一般模式下可以进行删除、粘贴等操作,但是无法编辑文件,要进入编辑模式可以在一般模式下在键盘上按下i,I(大写的i),o,O(大写字母o),a,A,r,R。各字母含义:
- i:从目前光标所在处插入;
- I:在目前所在行的第一个非空格符处开始插入;
- a:从目前光标所在的下一个字符处开始插入;
- A:为从光标所在行的最后一个字符处开始插入;
- o:在目前光标所在的下一行处插入新的一行;
- O:在目前光标所在处的上一行插入新的一行;
- r:取代光标所在的那一个字符一次;
- R:一直取代光标所在的文字,直到按下 ESC 键为止。
我进入编辑模式是万年不变的i。进入编辑模式后就可以愉快的编辑文件了。
3.3 命令模式
在一般模式当中,输入:, /,? 三个字符中任一个(注意是英文模式下),就可以将光标移动到最底下那一行,进入命令模式。在这个模式当中,可以进行读取、存盘、离开 vim、显示行号等等的动作。一些常用的命令:
指令 | 含义 |
---|---|
:w | 将编辑的数据写入文件 |
:q | 退出vim |
:wq | 保存并退出 |
:w filename | 将文件重新保存为名为filename的文件。注意w和文件名之间有一个空格 |
:term | 在vim中打开命令行 |
参考的资料包括但不限于:
- YCM官方
- vim插件网站
- 《鸟哥的Linux私房菜》
- 一个大佬的vim配置教程
- https://wsxq2.55555.io/blog/2018/11/25/Vim%E4%BB%A3%E7%A0%81%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%8F%92%E4%BB%B6vim-autoformat/
- http://astyle.sourceforge.net/
- https://blog.csdn.net/bcbobo21cn/article/details/52556805