Vim 除了强大的键盘模式以外, Vim 还有插件功能, 可以通过插件将 Vim 的功能增强, 经过多年的发展, Vim 的插件系统有着庞大的规模, 有很多号称神级的插件, 是很多编辑器的模仿对象.
怎么管理插件
插件的安装一般通过插件管理器来进行安装. Vim 的插件管理器有很多种, 我采用的是pathogen 管理, 你也可以采用其他的管理方式, 比如常见的 vbundle, 请自行 google 之.
在pathogen 的主页上可以学习到安装方式.
1
2
| mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
|
进入到新建的 bundle 目录, 下载相应的插件. 下面列出来我用的一些常用的插件
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
| " 自动关闭括号, 也就是输入左括号(, 然后自动添加右括号), 支持{} [] ()
https://github.com/vim-scripts/AutoClose.git
" 迅速打开当前目录下的所有文件, 支持模糊查找, 按下 ctrl+p 组合件之后, 输入要查找的文件名的一部分, 快速定位, 回车打开, vim 神器之一
https://github.com/kien/ctrlp.vim.git
" html 神器之一, 其他编辑器也有相应的实现
https://github.com/mattn/emmet-vim.git
" 自动完成插件, 需要 lua 支持, 记得我们在安装 vim 的时候增加了 --with-lua 的选项了么? 在 Windows 平台的 vim 中不支持 lua, 需要自行编译 vim 增加 lua 支持, Windows 充满了大坑啊! MacOS 你不变的选择.
https://github.com/Shougo/neocomplete.vim.git
" 缩进美化, 对不同层级的缩进增加可视化竖条
https://github.com/nathanaelkane/vim-indent-guides.git
" vim 神器之一, 快速定位到你需要的位置
https://github.com/easymotion/vim-easymotion.git
" 美化 vim 的状态条
https://github.com/Lokaltog/vim-powerline.git
" solarized 配色, 最流行的一种配色
https://github.com/altercation/vim-colors-solarized.git
" vim 的侧边文件管理器, 不过我用了 ctrl+p 之后, 很少用到它
https://github.com/scrooloose/nerdtree.git
|
怎么安装
我举一个例子, 比如 vim-colors-solarized 来说明.
1
2
| cd ~/.vim/bundle
git clone --depth 1 https://github.com/altercation/vim-colors-solarized.git
|
ok, 大功告成. 不过一般的情况下我们还需要在 .vimrc 中进行配置, 很多插件有很多的配置, 请自行在每个插件的网址中详细查看.
附上我的完整 .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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
let mapleader=";"
nmap <Leader>h 0
nmap <Leader>l $
vnoremap <Leader>y "+y
nmap <Leader>p "+p
nmap <Leader>q :q<CR>
" 在 vim 中, :vs 垂直分隔一个窗口, :sp(lit) 水平分割一个窗口, 然后使用下面四个映射命令, 在多个窗口中移动.
nmap <Leader>wh <C-W>h
nmap <Leader>wl <C-W>l
nmap <Leader>wj <C-W>j
nmap <Leader>wk <C-W>k
function! CBProcess()
if (getline(".")[col(".")-2] == '{' && getline(".")[col(".")-1] == '}') || (getline(".")[col(".")-2] == '[' && getline(".")[col(".")-1] == ']') || (getline(".")[col(".")-2] == '(' && getline(".")[col(".")-1] == ')')
return "\<CR>\<C-o>O"
else
return "\<CR>"
endif
endfunction
inoremap <expr><CR> CBProcess()
inoremap ;; <C-o>$;<CR>
" 映射启动 NERDTreeToggle 插件的快捷键
map <Leader>n :NERDTreeToggle<CR>
" 为了让插件生效, 必须配置插件管理器
execute pathogen#infect()
filetype plugin indent on
syntax on
syntax enable
set autowrite
set autowriteall
set ignorecase
set hlsearch
set incsearch
set smartcase
set gdefault
set showmatch
set autoindent
set ts=4 sts=4 sw=4 expandtab
set backspace=indent,eol,start
set noswapfile
set visualbell
set cursorline
set number
set laststatus=2
set ruler
set encoding=utf-8
set fileencoding=utf-8
" 设置背景颜色, 采用亮色的 solarized, 也可以设置为 dark 采用暗色调
set background=light
colorscheme solarized
set guifont=Menlo:h20
" 设置 indent guides 插件的参数
let g:indent_guides_enable_on_vim_startup=1
let g:indent_guides_start_level=1
let g:indent_guides_guide_size=1
" 设置 neocomplete
let g:neocomplete#enable_at_startup=1
let g:neocomplete#enable_smart_case=1
" 设置 emmet 的展开方式快捷键
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
" 设置 easymotion 是否区分大小写
let g:EasyMotion_smartcase=1
|
有问题, 请联系我.