vim 配置入门

本文从零开始为初学整理一份看得懂改得动的 vimrc 配置。初学者可以在这个基础上,逐步加入自己需要的配置,最终形成自己的风格。

别管网上的配置如何强大,自己能看懂的,才是最好的。

基础配置

vim 默认配置文件是 ~/.vimrc,没有的话请自行创建。配置如下:

" 禁止生成 swap 恢复文件
" 早期计算机经常崩溃,vim 会自动创建一个 .swp 结尾的文件
" 崩溃重启后可以从 .swap 文件恢复
" 现在计算机鲜少崩溃了,可以禁用此功能
set noswapfile
" vim 内部使用的编码,默认使用 latin1,改成通用的 utf8 编码,避免乱码
set encoding=utf-8
" 文件编码探测列表
" vim 启动的时候会依次使用本配置中的编码对文件内容进行解码
" 如果遇到解码失败,则尝试使用下一个编码
" 常见的乱码基本都是 windows 下的 gb2312, gbk, gb18030 等编码导致的
" 所以探测一下 utf8 和 gbk 足以应付大多数情况了
set fileencodings=utf-8,gb18030
" 在插入模式按回车时 vim 会自动根据上一行的缩进级别缩进
set autoindent
" 修正 vim 删除/退格键行为
" 原生的 vim 行为有点怪:
" 如果你在一行的开头切换到插入模式,这时按退格无法退到上一行
" 如果你在一行的某一列切换到插入模式,这时按退格无法退删除这一列之前的字符
" 如果你开启了 autoindent,按回车时 vim 会根据上一行自动缩进,这时按退格无法删除缩进字符
" 通过设置 eol, start 和 indent 可以修正上述行为
set backspace=eol,start,indent
" vim 默认使用单行显示状态,但有些插件需要使用双行展示,不妨直接设成 2
set laststatus=2
" 高亮第 80 列,推荐
set colorcolumn=80
" 高亮光标所在行,推荐
" 有人还会高亮当前列,可以通过 set cursorcolumn 开启,但有点过了,不推荐
set cursorline
" 显示窗口比较小的时候折行展示,不然需要水平翻页,推荐
set linebreak
" 开启语法高亮
syntax on
" 开启自动识别文件类型,并根据文件类型加载不同的插件和缩进规则
filetype plugin indent on

主题与插件

主题是一类特殊的插件。插件一般从 github 上下载。下载后放到 ~/.vim/pack/vendor/start 就可以了。这里的 vendor 可以随便取。我取了 vendor 是受了 php 的 composer 影响。

tender

vim 默认的主题确实难看。毫无疑问,得来一把整容。但每个人都有不同的审美。在这里我介绍一下自己使用多年 tender 主题。

git clone https://github.com/jacoborus/tender.vim ~/.vim/pack/vendor/start/tendor

我对主题做了微调:

" 开启 24 位真彩色支持
" 24位真彩色信息请参考 https://gist.github.com/XVilka/8346728
set termguicolors
" 设置主题
color tender
" tender 默认背景色是一种亮灰色,晚上特别不舒服,改成纯黑
highlight Normal guibg=#000001
" 改背景后选中区域无法高亮,也得调一下
highlight Visual guibg=#323232
" 灰色的状态栏很扎眼,调一下
highlight StatusLine guibg=#444444 guifg=#b3deef
" vim 的 terminal 状态栏需要单独配置
highlight StatusLineTerm guibg=#444444 guifg=#b3deef
highlight StatusLineTermNC guibg=#444444 guifg=#999999

nerdtree

git clone https://github.com/scrooloose/nerdtree ~/.vim/pack/vendor/start/nerdtree

执行 :NERDTree 可以在左边打开一个类似文件浏览器的窗口。可以像普通窗口一样移动光标、搜索关键字,惟一的不同是按回车键可以展开文件夹,如果在在文件上按回车则会打开相应的文件。

执行 :NERDTreeToggle 则可以打开或者关闭窗口;执行 :NERDTreeFind 则可以打开管理窗口并将光标定位到当前文件。

因为实在是太常用,我给这两个命令设了两个快捷键:

nnoremap <silent> <leader>e :NERDTreeToggle<cr>
nnoremap <silent> <leader>f :NERDTreeFind<cr>

vim 有个 leader 键,默认这个键是 \。leader 键提供了一个键位空间,防止用户自定义的快捷键覆盖默认键位的功能。推荐大家使用 leader 键。网上有人推荐使用 , 作为 leader 键。真心不推荐,因为 , 是跟 ; 配对,用来重复行内查找的。

在这里,当按 \+e 时 vim 打开 NERDTree;按 \+f vim 会打开 NERDTree 并定位到当前文件。非常方便。

fzf

模糊路径搜索应该是现在编辑器的标配功能,vim 也不例外。我最早使用的 ctrlp.vim。现在推荐使用搜索速度更快的 fzf

首先需要按装 fzf 工具,如果你用 mac,可以执行:

brew install fzf

然后按装我自己的 fzf.vim

git clone https://github.com/lvht/fzf ~/.vim/pack/vendor/start/fzf

做一个键位映射,我依然使用 ctrl+p:

nnoremap <silent> <c-p> :call fzf#Open()<cr>

但是,为什么要用自己的 fzf 插件呢?我开发的版本是基于 terminal 特性实现的,总共不到五十行代码,非常简炼。推荐大家使用。如果大家对 fzf 插件的原理感兴趣,则可以参考

吕海涛:基于 fzf 开发自己的 CtrlPzhuanlan.zhihu.com图标

mru

另一个常用的插件也是我自己开发的,叫 mru

git clone https://github.com/lvht/mru ~/.vim/pack/vendor/start/mru

mru 的功能也很简单:记录最近打开过的文件列表。如果执行 :Mru 命令,mru 会打开一个窗口列出最近打开过的文件列表。你可以移动光标选择文件,按回车就可以切换到对应的文件。

因为很常用,我也设了一个快捷键:

nnoremap <silent> <c-u> :Mru<cr>

mru 还是学习 vim 插件开发的好材料,如果感兴趣可以参考

吕海涛:vim 插件开发入门之 MRUzhuanlan.zhihu.com图标

ack

最后一个必备插件是 ack,用于搜索文件内容。

git clone https://github.com/mileszs/ack.vim ~/.vim/pack/vendor/start/ack

ack 插件默认是配合 ack 使用的。但推荐使用更快的 ag。如果使用 mac 则可以:

brew install the_silver_searcher

如果要搜索 vim 关键字,则可以执行 :Ack vim。ack 还支持正则表达式,有兴趣的同学可以查阅相关文档。

总结

本文介绍了一个最精简的 vimrc 配置,并推荐了几个简单却极为常用的插件,希望能为初学者打开一扇门。

我个人使用的完整版本请参考 github.com/lvht/vim

发布于 2019-06-19