从零开始配置你的个性化Vim

cover > pixiv-ID: 42105534

这是Vim系列教程中的一篇,讲述如何将Vim配置为自己喜欢的样子。

先放一张我的Vim配置后的截图: vim-screen

Vim的配置文件位于~/.vimrc,文件使用VimScript语法来编写。 有必要为了Vim而专门去学习VimScript吗?我个人的建议是:不需要,你将在日后为了实现自己的想法折腾插件时慢慢了解VimScript。而且现在Vim社区的大量插件足够满足一般人的日常需要了。

所谓授人以鱼不如授人以渔,本文不会进行大量的插件罗列(仅介绍个人认为必备的),而是教你如何安装自己想要的插件,为日后的自行折腾铺平道路。

我将.vimrc文件分为三个部分,分别是:

本文将按照顺序进行讲解。

Vim编辑器配置部分

配置完插件后,我们就要配置一下编辑器了,Vim的配置自由度非常高,比如编辑器是否显示行数,使用空格还是tab等。这部分的配置通过搜索一般都可以找到,推荐这个小工具,可以模拟Vim,帮你找到自己喜欢的配置。

值得一提的是,由于使用vimscript,所以我们可以在配置中加入一些逻辑,例如:

1
2
3
4
5
if strftime('%H') >= 21 || strftime('%H') <= 9
set background=dark
else
set background=light
endif

这个逻辑判断了当前的系统时间,当系统时间在晚上九点后到早上九点前会自动使用暗色背景,其他时间会使用亮色背景。

再例如在终端中开启256色并模拟GUI中的光标模式:

1
2
3
4
5
6
7
8
9
10
if !has('gui_running')
set t_Co=256
if has('termguicolors')
set termguicolors
end
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
set timeoutlen=1000 ttimeoutlen=0
else

这样,插入模式的光标会变为竖线,替换模式的光标会变为下划线。

需要注意的是,颜色主题往往也定义在这一部分中。


Vim插件配置部分

vim的很多插件都是需要配置的,插件的配置一般分为两种,一种是对插件本身的配置,另一种是对插件快捷键的配置。以著名插件nerdtree为例:

1
2
3
4
5
6
" 插件的配置
let NERDTreeWinSize=20
let NERDTreeWinPos="right"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
" 快捷键的配置
nmap <F5> :NERDTreeToggle<CR>

在插件的配置中,我们定义了nerdtree窗口的宽度,打开的方向和忽略指定格式的文件。在快捷键的配置中,我们用映射模式F5映射为:NERDTreeToggle+enter来打开nerdtree。

关于映射模式: 定义映射模式时,我们可以使用nmapimapvmap来定义映射仅在normal、insert、visual模式有效。 一般的映射模式是有副作用的,例如:

1
nmap dd O<esc>jddk

这一命令想要将dd映射为: * O向上添加一个新行 * esc返回normal模式 * j向下移动到要删除的一行 * dd删除这一行 * k向上移动到新增的一行

然而实际执行中,当你按下dd时,文件会无限刷出空行直到你按下,这是因为这一命令中jddk中的dd也按照按键映射解读了。因此形成了一个死循环。 命令noremap解决了这个问题,每一个map命令都对应一个noremap命令。包括noremapnnoremapinoremapvnoremap,它可以保证映射中的操作都遵循默认的操作。 这次我们使用noremap重新定义刚才的映射:

1
nnoremap dd O<esc>jddk

再次测试,发现不再出现死循环了。

使用Leader键: vim中的组合键是通过按键序列来执行的,例如qd这个操作,你只需要先按下q再按下d就好了,而不需要qd一起按。 由于Vim已经占用了大量的按键,导致我们配置快捷键时处处受限。 由于有些按键在vim的非insert模式中几乎是永远不会用到的(例如逗号,),因此我们可以在快捷键的命令前统一加上这个键,方便好记又不会冲突。这个键就称为Leader键。 我们可以通过let mapleader=","这一命令将逗号设置为leader键(设置其它键的方法同理)。然后对前文中我们定义的映射dd做一些修改:

1
nnoremap <leader>dd O<esc>jddk

这下我们就可以通过,dd的组合键来调用映射了。

这就是对Vim基础配置的介绍内容,这里提供我的配置文件以供各位参考。

本文总阅读量