Vim 的安装

首先检查你的系统中是否安装 Vim,如果没有安装的话,则在终端执行如下命令进行安装:

1
sudo apt-get install vim

插件管理器

插件管理器的选择

Vim 的插件管理也是有许多种的,而我选择的是 vim-plug

vim-plug 是一款轻量级,且功能强大,且易于使用的插件管理器,对我这种喜欢简单的人自是极其友好的。

安装 vim-plug

1. 使用 curl 命令下载 vim-plug 源码:

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

2. 使用 vim-plug 的目录结构规划如下,之后安装的插件将存放在 plugged 目录中:

3. 在 ~/.vimrc 配置文件中增加 plug-vim 部分:

1
2
3
4
call plug#begin('~/.vim/plugged')
" plug list

call plug#end()

call plug#begin('~/.vim/plugged')call plug#end() 之间使用 Plug 命令列出插件。

vim-plug 安装插件的 4 种方式

下面介绍在 ~/.vimrc 配置文件中安装插件 4 种方式:

1. 安装在 vim-scripts 仓库插件

1
Plug 'PluginName'

PluginName 中的 空格 使用 - 替换。

示例:

1
Plug 'L9'

执行这个指令的时候,首先检查该插件是否已经下载到本地,如果没有下载,则会使用 git 下载,下载的方式如下:

1
git -C ~/.vim/plugged clone --recursive https://github.com/vim-scripts/L9.git
  • --recursive是顺便把子模块的代码也一起下载到~/.vim/plugged/L9目录中。

然后才是安装该插件。

要注意的是:安装插件不等于下载插件,安装插件是对该插件资源的管理, 你自己下载下来,放到对应的位置,但是你没有配置该指令,就不会安装,它的功能你也就用不了,这就是插件管理器的作用, 插件管理器不仅仅是下载插件代码的。这个要搞清楚。

2. 安装在 GitHub 仓库中的插件

如果您要安装的插件在 GitHub 仓库中, 那么,配置的格式如下:

1
Plug 'userName/repoName'

示例:

1
2
3
4
Plug 'tpope/vim-fugitive'
Plug 'Lokaltog/vim-easymotion'
Plug 'rstacruz/sparkup', {'rtp': 'vim/'}
Plug 'tpope/vim-rails.git'

执行这个指令的时候,首先检测该插件是否已经下载到本地了,如果没有下载, 就会使用 git 下载,下载的方式如下:

1
git -C ~/.vim/plugged clone --recursive https://github.com/tpope/vim-fugitive.git
  • --recursive是顺便把子模块的代码也一起下载到~/.vim/plugged/vim-fugitive目录中。

3. 安装在非 GitHub 仓库,但使用 git 管理的插件

如果您要安装的插件使用 git 管理的,但是它并不在 GitHub 仓库中, 那么配置的格式如下:

1
Plug 'git://...'

示例:

1
Plug 'git:https://gitee.com/mirrors/youcompleteme.git'

执行这个指令的时候,首先检测该插件是否已经下载到本地了,如果没有下载, 就会使用 git 下载,下载的方式如下:

1
git -C ~/.vim/plugged clone --recursive https://gitee.com/mirrors/youcompleteme.git
  • --recursive是顺便把子模块的代码也一起下载到~/.vim/plugged/youcompleteme目录中。

4. 安装在本地文件系统中的插件

如果您要安装的插件在本地的文件系统中,那么配置的格式如下:

1
Plug 'file://...'

示例:

1
Plug 'file:///Users/gmarik/path/to/plugin'

vim-plug 命令使用

vim-plug 提供了下面的命令用来管理插件,在 Vim 的底行模式下输入如下命令:

1
:PlugInstall
命令描述
PlugInstall [name...]安装指定pluginName的插件。如果没有指定pluginName,就安装在~/.vimrc配置文件中配置的插件。
PlugUpdate [name...]更新指定pluginName的插件。如果没有指定pluginName,就更新所有已经安装了的插件。
PlugClean卸载已经安装,但是没有在 ~/.vimrc 中配置的插件
PlugStatus查看插件的状态
PlugUpgrade更新 vim-plug 自己

常用配置推荐

以下常用配置是参考阮一峰Vim 配置入门

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
" === vim 基础配置
set nocompatible " 不与 Vi 兼容
syntax on " 打开语法高亮
set showmode " 底部显示当前模式
set showcmd " 底部显示当前指令
set encoding = utf-8 " 使用 utf-8 编码
set t_Co = 256 " 启用 256 色
filetype indent on " 开启文件类型检查

set autoindent " 缩进一致
set tabstop = 2 " 按下 tab 键,显示的空格数
set shiftwidth = 4 " 缩进字符数
set expandtab " 自动将 tab 转为空格
set softtabstop = 2 " tab 转为空格数

set number " 显示行号
set cursorline " 光标所在行高亮
set textwidth = 80 " 设置行宽
set wrap " 自动折行
set linebreak " 遇到指定符号发生折行
set wrapmargin = 2 " 折行处与编辑窗口右边缘空出的字符数
set scrolloff = 5 " 垂直滚动时,光标距离顶部/底部的位置
set sidescrolloff = 15 " 水平滚动时,光标距离行首/行尾的位置
set laststatus = 2 " 是否显示状态栏。0:不显示;1:多窗口显示;2:显示
set ruler " 状态栏显示光标位置

set showmatch " 光标遇到 ([{ 自动高亮另一个括号
set hlsearch " 搜索时,高亮显示匹配结果

set spell spelllang = en_us " 英文单词拼写检查
set nobackup " 不创建备份文件
set noswapfile " 不创建交换文件
set undofile " 保留撤销历史

" 设置备份文件、交换文件、操作历史文件的保存文件
set backupdir = ~/.vim/.backup//
set directory = ~/.vim/.swp//
set undodir = ~/.vim/.undo//

set noerrorbells " 出错时,别发声
set visualbell " 出错时,屏幕闪烁
set history = 1000 " 记住历史操作数
set autoread " 打开文件监视

set wildmenu
set wildmode = longest:list,full " 命令模式下,按下 tab 自动补全

推荐插件

Rust.vim

Rust.vim 用来提供 Rust 文件检查、语法突出显示、格式化、Syntastic 集成等。适用于 Vim 8 或更高版本。

  • 安装
    将以下文本添加到 .vimrc 文件。
1
Plug 'rust-lang/rust.vim'
  • Rust. Vim 的配置
    .vimrc 的文件中添加以下内容:
1
2
3
4
5
6
7
8
9
10
" === rust.vim 配置 ===
syntax enable " 打开语法高亮
filetype plugin indent on " 启动文件类型插件、缩进和语法高亮功能

let g:rustfmt_autosave = 1 " 保存时自动运行 :RustFmt 格式化代码
let g:rustfmt_command = "rustfmt" " 自定义格式化命令

" 快捷键 F5 编译运行 Rust 程序,快捷键 F6 运行测试 Rust 程序
autocmd filetype rust nnoremap <F5> : <bar> exec 'RustRun'<CR>
autocmd filetype rust nnoremap <F6> : <bar> exec 'RustTest'<CR>

增加快捷键 F5 用于把单个 rs 文件编译运行到临时文件夹,快捷键 F6 只运行当前光标所在的测试。

vim-lsp 和 vim-lsp-settings

Vim-lsp 是一种通过 language server protocol 协议实现动态代码解析、跳转功能的工具。

  • 安装
    将以下文本添加到 .vimrc 文件:
    1
    2
    Plug 'prabirshrestha/vim-lsp'
    Plug 'mattn/vim-lsp-settings'

重新启动 Vim, 指令模式下输入 :PlugInstall 指令安装插件。

  • 使用
    编辑要支持类型的文件时,使用以下指令下载 Lsp 服务器:
    1
    :LspInstallServer

主题:molokai

  • 安装
    将以下文本添加到 .vimrc 文件:
    1
    Plug 'tomasr/molokai'     

重新启动 Vim, 指令模式下输入 :PlugInstall 指令安装插件。

  • 使用
    .vimrc 的文件中添加以下内容:
1
colorscheme molokai

NERDTree

NERDTree 是 Vim 编辑器的文件系统浏览器,使用该插件,可以直观地浏览复杂的目录层次结构,快速打开文件进行读取或编辑,执行基本的文件系统操作。

  • 安装
    将以下文本添加到 .vimrc 文件。
1
Plug 'preservim/nerdtree'

重新启动 Vim, 指令模式下输入 :PlugInstall 指令安装插件。

  • NERDTree 的配置
    .vimrc 的文件中添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
" === NERDTree 配置 ===
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
\ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif
" 当 NERDTree 是选项卡中剩下的唯一窗口,则退出 Vim。
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

let g:NERDTreeShowHidden = 1 " 显示隐藏文件
let g:NERDTreeFileLines = 1 " 显示文件行数
let NERDTreeWinPos="left" " 设置 NERDTree 子窗口位置
" 设置忽略的文件
let NERDTreeIgnore=['\.vim$', '\~$', '\.o$', '\.d$', '\.a$', '\.out$', '\.tgz$']
" 快捷键 Ctrl + t,打开/关闭目录
nnoremap <C-t> :NERDTreeToggle<CR>

我只保留了 Ctrl + t 快捷键用来打开/关闭目录。

minimap. Vim

minimap.vim 是 vim 的代码缩略图。

  • 安装
    将以下文本添加到 .vimrc 文件:
    1
    Plug 'wfxr/minimap.vim'

重新启动 Vim, 指令模式下输入 :PlugInstall 指令安装插件,同时你需要 cargo install code-minimap 下载依赖。

  • 使用
    .vimrc 的文件中添加以下内容:
1
2
3
let g:minimap_width = 10
let g:minimap_auto_start = 1
let g:minimap_auto_start_win_enter = 1

NERD Commenter

NERD Commenter 是一款 Vim 的注释功能插件。

  • 安装
    将以下文本添加到 .vimrc 文件:
    1
    Plug 'preservim/nerdcommenter'

重新启动 Vim, 指令模式下输入 :PlugInstall 指令安装插件。

  • 使用
    .vimrc 的文件中添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
" === NERDCommenter 配置
let g:NERDCreateDefaultMappings = 1 " 创建默认映射
let g:NERDSpaceDelims = 1 " 在注释分隔符后添加空格
let g:NERDCompactSexyComs = 1 " 使用紧凑语法美化多行注释
let g:NERDDefaultAlign = 'left' " 行式注释分隔符向左对齐
let g:NERDAltDelims_java = 1 " 将设置默认使用 java 语言的分隔符
let g:NERDCommentEmptyLines = 1 " 允许注释和反转空行
let g:NERDTrimTrailingWhitespace = 1 " 在取消注释时去除尾随空白
let g:NERDToggleCheckAllLines = 1 " 检查所有选定的行是否有注释
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }

" === Commenter使用 ===
" \cc 注释当前行和选中行
" \cn 没有发现和\cc有区别
" \c<空格> 如果被选区域有部分被注释,则对被选区域执行取消注释操作,其它情况执行反转注释操作
" \cm 对被选区域用一对注释符进行注释,前面的注释对每一行都会添加注释
" \ci 执行反转注释操作,选中区域注释部分取消注释,非注释部分添加注释
" \cs 添加性感的注释,代码开头介绍部分通常使用该注释
" \cy 添加注释,并复制被添加注释的部分
" \c$ 注释当前光标到改行结尾的内容
" \cA 跳转到该行结尾添加注释,并进入编辑模式
" \ca 转换注释的方式,比如: /**/和//
" \cl \cb 左对齐和左右对其,左右对其主要针对/**/
" \cu 取消注释

总结

目前这篇文章尚未完结,我也只是针对当前所使用的一些使用和配置进行了总结。我会在 github 上建一个仓库用来保存我的全部 .vimrc 配置,不清楚的可以参考该仓库。