vimrc 配置文件

很多人感觉 Vim 不如 IDE,通常是因为难看的界面和没那么方便的功能,而究其原因其实是因为他们都没有配好自己的 vimrc 文件,所有的 IDE 都有一个类似这样的文件,只是绝大多数情况下你都碰触不到,而学习 vimrc 则是你配置自己的 IDE 的一个开始。

快速配置

在学习 vimrc 之前,我们先来了解下怎样快速配置。

首先打开练习文件 Object.java,然后进入 command 模式

:set number

回车后,你会发现在编辑器的左边出现了行号。

这是我们配置编辑器的第一步,我们可以在 command 模式下配置然后预览我们的配置结果,但是当你退出文件再进来,会发现刚才的配置已经失效了,它只在当前缓冲区生效,而想要让配置长久生效,就需要将配置信息放入 vimrc 文件中,这样每次打开 Vim 都会读取配置文件。

了解 vimrc

Vim 读取配置的默认路径为 ~/.vimrc,如果你的环境没有需要新建该文件

$ touch ~/.vimrc

我们在文件中输入设置行号的命令

$ vim ~/.vimrc

set number

然后退出文件,重新打开 Object.java,会发现行号的配置又生效了。每次使用 Vim 重新打开文件,新加的配置就会生效。

重新加载 vimrc

现在我们要在加一些改动,你要关掉当前文件再打开 .vimrc 吗?没必要,还记得分割屏幕吗。

:vsp ~/.vimrc

如此,我们可以一边编辑文件,一边修改配置了。

先加上这两行配置,并保存

set cursorline                  "突出显示当前行"
set cursorcolumn                "突出显示当前列"

然后需要做在 Object.java 中生效,怎么做呢,退出然后重新进来?每次都这样你一定会烦死的,也会显得很蠢(虽然我曾经这样蠢了很久),我们有更好的方法。

在目标文件中执行如下命令就行了。

:source $MYVIMRC

$MYVIMRC 在 Vim 环境中代表了 ~/.vimrc 的常量,这句话的意思就是重新加载配置文件,当然你也可以通过 :source ~/.vimrc 来实现。

常用的配置

set nocompatible                    " 去掉对vi的兼容,让vim运行在完全模式下

set compatible 就是让 vim 关闭所有扩展的功能,尽量模拟 vi 的行为。但这样就不应用 vim 的很多强大功能,所以一般没有什么特殊需要的话(比如执行很老的 vi 脚本),都要在 vim 的配置开始,写上 set nocompatible,关闭兼容模式。由于这个选项是最最基础的选项,会连带很多其它选项发生变动(称作副作用),所以它必需是第一个设定的选项。

syntax on                   " 开启语法高亮"

这个功能对开发尤其有用,Vim 本身是会对一些简单的关键词做高亮处理的,而很多插件对语法高亮也都依赖这个设置。

set history=2003            " 记录 Vim 历史操作的条数

Vim 内的所有操作都会在一个 ~/.viminfo 中记录,该设置可以配置最多记录的条数。

set autoread                " 文件在vim外修改过自动重新载入
au CursorHold,CursorHoldI * checktime

默认情况下,外部修改了当前打开的文件,Vim 是不会自动重新载入的,加上这两条配置,Vim 会定时检查是否有外部改动并重载,如果改动不及时,你也可以通过 :e 手动加载。

set novisualbell          "关掉可视化响铃警报
set noerrorbells          "关掉错误警报
set visualbell t_vb=      "关掉警报

闹人的报警声还是挺烦人的,可以关掉它。

set tm=500
set t_Co=256

显示 256 色,很多主题插件都需要打开它。

filetype on                     " 开启文件类型检测
filetype plugin on              " 开启插件的支持
filetype indent on              " 开启文件类型相应的缩进规则

这个配置组非常有用,开启后 Vim 可以根据打开的文件格式显示不同的高亮、使用缩进等。不管是使用插件还是自己写插件对他非常依赖。你可以使用 :filetype 来查看当前文件是否开启文件检测

" encoding
set encoding=utf-8              " 打开文件时编码格式
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1         "vim会根据该设置识别文件编码

set fileformat=unix                 " 设置以unix的格式保存文件"
set fileencoding=utf-8          " 在保存文件时,指定编码
set termencoding=utf-8          " 终端环境告诉vim使用编码
set ffs=unix,dos,mac            " 在创建文件或写入时,这三种文件格式分别决定了行末要添加什么特殊字符,而在读入文件时,又分别决定了要从行末移去什么特殊字符。
set formatoptions+=m
set formatoptions+=B

" 主题
set background=dark               " 配色主题的色系,注意,这不是什么背景色!dark 是暗色系,light 是亮色系。
colorscheme desert              " 配色主题的名称,:coloscheme 后键入<tab>可以自动补全 比较喜欢的desert,peachpuff,torte,elfload,slate

" show
set number                      " 显示行号
set ruler                                   " 显示当前光标行号和列
set wrap                                  " 设置折行 set nowrap 为不折行
set sidescroll=1                " 默认设置set sidescroll=0之下,当光标到达屏幕边缘时,将自动扩展显示1/2屏幕的文本。通过使用set sidescroll=1设置,可以实现更加平滑的逐个字符扩展显示。
set showcmd                               " 在屏幕右下角显示未完成的命令
set showmode                              " 显示当前vim模式
set showmatch                           " 显示匹配的括号
set matchtime=1                         " 设置showmatch的效果时间,默认500ms,现在是100ms
set cursorline                      " 突出显示当前行
set cursorcolumn                    " 突出显示当前列
set colorcolumn=80              " 设置某一列高亮


" search
set smartcase                   "搜索时,如果输入大写,则严格按照大小写搜索,如果小写,并设置了ignorecase,则忽略大小写
set ignorecase                  "搜索时忽略大小写"
set incsearch                   "搜索时及时匹配搜索内容,需要回车确认
set hlsearch                    "高亮搜索项"

" tab
set expandtab                   "将<tab>符号转变为<space>空格
set smarttab                    "配合shiftwidth使用,如果设置该值,在行首键入<tab>会填充shiftwidth的数值,其他地方使用tabstop的数值,不设置的话,所有地方都是用shiftwidth数值

" indent
set autoindent                  "换行自动缩进
set smartindent                 "缩进采用c语言风格
set shiftround                  "在一般模式下键入>>整个缩进shiftwidth的长度,<<反向操作,== 可以与上一行对齐,插入模式下C-T和C-D也可以左右启动
set shiftwidth=4                "缩进的空格数
set tabstop=4                   "键入<tab>的步长
set softtabstop=4                " insert mode tab and backspace use 4 spaces

" set mark column color
hi! link SignColumn   LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange

" status line
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set laststatus=2   " 底部显示两行状态栏"


" select & complete
set selection=inclusive         "选择文本事,光标所在位置也会被选中
set selectmode=mouse,key

set scrolloff=5                 "距离顶部和底部5行"
set backspace=2                 "任何情况允许使用退格键删除
set mouse=a                     "启用鼠标"

" 代码折叠
set foldlevelstart=99           "默认不折叠"
set foldmethod=indent           "按照缩紧折叠"

剩下这些配置也都很有用,你可以尝试着一个个配置上对比效果。Vim 的配置千变万化,这些只是部分基本配置,基本没有两个人的 vimrc 文件是完全相同,人们会根据当前的学习进度和自己的环境配置不同的样式和功能,这也是 Vim 迷人的地方,构建自己的 IDE,谁不想呢。

记住,在这个环节需要我们勤用 :help 查看帮助文档,比如 :h showcmd 它的讲解绝对任何人都专业。

在对 vimrc 有了初步的了解后,以后我们会逐步学习各种高效的配置,让我们的 Vim 越来越得心应手。

2018-04-17 发布