这篇文章会简单总结一下我的 vim 配置。完整配置见这里。最终效果如

1. 插件管理

我使用 Pathogen 和 git 来管理 vim 插件。

首先,在 ~/.vim/ 中运行 git init 以创建 git repo。

然后,下载 pathogen.vim 并保存在 ~/.vim/autoload/。同时,在 ~/.vim/ 中创建目录 bundle。并在 ~/.vimrc 中加入:

execute pathogen#infect()

这样,在 bundle 中运行 git clone [URL] 即可安装插件。

随后,运行下面的脚本,将各个插件添加为 git 中的 submodule。

#!/bin/bash
for x in $(find . -type d) ; do
    if [ -d "${x}/.git" ] && [ ${x} != '.' ]; then
        cd "${x}"
        origin="$(git config --get remote.origin.url)"
        cd - 1>/dev/null
        git submodule add "${origin}" "${x}"
    fi
done

需要更新插件时,运行下面的脚本:

#!/bin/bash
for x in $(find . -type d) ; do
    if [ -d "${x}/.git" ] && [ ${x} != '.' ]; then
        cd "${x}"
        git pull
        cd - 1>/dev/null
    fi
done

2. 配置

为了避免配置文件过于混乱,在 ~/.vim/ 中创建 snippets 目录。将所有的配置文件都放在该目录下,并在 ~/.vimrc 中加入:

runtime! snippets/*.vim

同时打开 filtype plugin。完整的 ~/.vimrc 如下:

execute pathogen#infect()
runtime! snippets/*.vim
filetype plugin on

3. 基本设置

打开行号现实、语法加亮和自动缩进:

set nocompatible

set number
syntax on
set autoindent

设置软 tab。按 tab 会自动输入四个空格。

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set smarttab
autocmd FileType make setlocal noexpandtab

其它的一些设置:

" Set format options
set formatoptions+=tm

" Multibuffer support
set hidden

" Tab completion when opening a file
set wildmode=longest,list
set wildmenu

set mouse=a
set incsearch
set hlsearch

set backspace=indent,eol,start

set showcmd

set clipboard+=unnamedplus

此外,方向键设置如下:

nnoremap <Down> gj
nnoremap <Up> gk
vnoremap <Down> gj
vnoremap <Up> gk
inoremap <Down> <C-o>gj
inoremap <Up> <C-o>gk

4. 状态栏

使用 vim-airline 作为状态栏。同时安装相关主题: vim-airline-themes,并安装 bufferline 以现实当前所有的 buffer 用于同时编辑多个文件。

cd ~/.vim/bundle
git clone https://github.com/vim-airline/vim-airline.git
git clone https://github.com/vim-airline/vim-airline-themes.git
git clone https://github.com/bling/vim-bufferline.git

新建 ~/.vim/snippets/airline.vim 并加入:

let g:airline#extensions#bufferline#enabled = 0
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'default'

5. 其它插件

我对各个插件的详细配置见这里

6. Rust 开发环境

安装 rust.vim 即可。Rust.vim 会自动调用 syntatics 做语法检查。还可以使用 rusty-tags 以利用 cargo 生成符号表。但是,rusty-tags 生成的 tag 不能直接用于 tagbar,需要进行一下配置:

autocmd BufRead *.rs :setlocal tags=./rusty-tags.vi;/
autocmd BufWritePost *.rs :silent! exec "!rusty-tags vi --quiet --start-dir=" . expand('%:p:h') . "&" | redraw!

 let g:tagbar_type_rust = {
    \ 'ctagstype' : 'rust',
    \ 'kinds' : [
        \'t:types',
        \'f:functions',
        \'g:enum,enumeration names',
        \'s:structure names',
        \'m:members',
        \'c:implementations',
        \'i:traits',
        \'P:methods',
        \'M:macros',
        \'e:elements',
        \'v:variables',
    \  ],
    \ 'sro' : ':',
    \ 'kind2scope' : {
        \ 'c' : 'implementation',
        \ 's' : 'struct',
        \ 'g' : 'enum',
        \ 'i' : 'interface',
      \ },
    \ 'scope2kind' :  {
        \ 'implementation' : 'c',
        \ 'struct' : 's',
        \ 'enum' : 'g',
        \ 'interface' : 'i',
      \ },
    \}

7. Standard ML 开发环境

可以直接参考这篇文章

8. 配色

Github 上可以找到别人收集的 vim 配色方案合集。我个人比较喜欢 onedark

安装完配色方案之后记得在配置文件中加入

colorscheme [方案名]