vim常用插件安装

Vim8内置插件管理方案

在Vim8这个版本Vim有了自己的插件管理方案,引入了packages的概念。用户只需要将插件放在指定的目录下,vim 就会自动加载这个插件。

假如有插件NERDTree,只需要将插件放在~$ .vim/pack/vendor/start/这个目录下即可。

Vim8会自动加载

1
~$ .vim/pack/*/start/

目录下的插件,也就是说插件也可以放在.vim/pack/NERDTree/start/下。

那些我们不想自动加载的插件可以放到opt目录下。

1
~$ .vim/pack/*/opt/

然后在~$ .vimrc中使用packadd来手动加载插件,例如:

1
2
3
4
5
if xxx_version > 34
packadd xxx
else
packadd xxx
endif

:computer:在windows中,vim的下载目录下,vim82文件夹相当于.vim文件夹,_vimrc相当于.vimrc

:notebook: 查看文档::h packages可以获得更多帮助信息

vim插件推荐

参阅 Vim Awesome 获取热门插件

NERDTree插件安装及使用

下载NERDTree插件

NERDTree下载地址:https://github.com/preservim/nerdtree.git
使用git下载NERDTree插件,并将插件放在vim8要求的目录:

1
2
3
~$ mkdir -p ~/.vim/pack/NERDTree/start
~$ cd ~/.vim/pack/NERDTree/start
~$ git clone https://github.com/preservim/nerdtree.git

NERDTree插件的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
"将该配置写进.vimrc文件中"
"打开NERDTree的快捷键设置"
nnoremap <C-n> :NERDTree<CR> :set nu<CR>
"关闭NERDTree"
nnoremap <C-t> :NERDTreeToggle<CR>
"打开NERDTree,在node中选中当前文件"
nnoremap <C-f> :NERDTreeFind<CR>
"vim打开时,自动打开NERDTree,并且将光标放在文件窗口"
autocmd VimEnter * NERDTree | wincmd p
"当NERDTree是唯一的窗口时退出vim"
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
"在每一个新的new tab打开存在的NERDTree"
autocmd BufWinEnter * silent NERDTreeMirror

NERDTree常用快捷键

光标位置 快捷键 说明
左侧树形目录 s 纵向分割窗口打开文件
左侧树形目录 i 水平分割窗口打开文件
左侧树形窗口 t 在标签页中打开
左侧树形窗口 T 在后台标签页中打开
左侧树形窗口 p 到上层目录
左侧树形窗口 P 到根目录
左侧树形目录 K 到同目录第一个节点
左侧树形目录 J 到同目录最后一个节点
左侧树形目录 m 显示文件系统菜单(添加、删除、移动操作)
左侧树形目录 C 改变树的根为当前目录
左侧树形目录 ? 帮助
左侧树形目录 q 关闭

gruvbox插件

插件说明: 更改vim的配色

插件安装

gruvbox 下载地址:https://github.com/morhetz/gruvbox.git
使用git下载 gruvbox 插件,并将插件放在vim8要求的目录:

1
2
3
~$ mkdir -p ~/.vim/pack/gruvbox/start
~$ cd ~/.vim/pack/gruvbox/start
~$ git clone https://github.com/morhetz/gruvbox.git

插件配置

1
2
3
4
"设置暗色背景"
set background=dark
"配色方案选用gruvbox"
colorscheme gruvbox

lightline插件

插件说明: 美化vim的状态栏

插件安装

lightline 下载地址:https://github.com/itchyny/lightline.vim.git

使用git下载 lightline 插件:

1
2
3
~$ mkdir -p ~/.vim/pack/lightline/start
~$ cd ~/.vim/pack/lightline/start
~$ git clone https://github.com/itchyny/lightline.vim.git

Vim-Rainbow插件

插件说明: Vim-Rainbow插件会给每一对括号加一个独特的颜色,这样你就会很容易辨认,而且会让代码显的丰富多彩

Vim-Rainbow下载地址:https://github.com/kien/rainbow_parentheses.vim.git
使用git下载 Vim-Rainbow 插件:

1
2
3
~$ mkdir -p ~/.vim/pack/rainbow/start
~$ cd ~/.vim/pack/rainbow/start
~$ git clone https://github.com/kien/rainbow_parentheses.vim.git

coc.nvim插件

插件说明: 代码自动补全

coc.nvim下载地址: https://github.com/neoclide/coc.nvim.git

说明: 打开上述地址,进入coc.nvim的github仓库,点击Wiki查看安装说明,以及使用说明。

coc.nvim安装环境要求

安装 Node.js

  • linux安装
    curl -sL install-node.now.sh | bash
  • windows安装
    打开网址:https://nodejs.org/en/ ,下载安装

安装 Yarn

下载后将node.js和yarn均添加到环境变量

coc.nvim的安装

1
2
3
4
~$ mkdir -p ~/.vim/pack/coc/start
~$ cd ~/.vim/pack/coc/start
~$ git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
~$ vim -c "helptags coc.nvim/doc/ | q"

安装coc.nvim的插件

:point_right:coc.nvim支持的语言插件

安装插件(两种方式):

  • 使用CocInstall
    :CocInstall coc-json coc-css
  • 使用g:coc_global_extensions变量,当coc.nvim服务开启的时候,coc会自动加载缺失的插件
    let g:coc_global_extensions = ['coc-json', 'coc-git']

卸载插件:

  • :CocUninstall coc-css

使用CocList管理插件:

  • :CocList extensions

插件状态:

  • ? 无效的插件
  • * 插件处于活动状态
  • + 插件被加载
  • - 插件失能

注意: 有的插件有依赖,如coc-clangd依赖clangd

coc.nvim的配置文件

打开配置文件::CocConfig

:point_right:关键字

例子:安装c/c++的语法补全

  1. 安装coc-clangd
    :CocInstall coc-clangd
  2. clangd有些c库支持不全需要另外添加
    • 下载MinGW或者安装vs都可以
    • 如果下载的是MinGW则将include的路径添加到环境变量INCLUDE
  3. 取消coc-clangd的错误提示(看需求,如果库添加的不全,则引用头文件的时候,会有错误提示)
    • 打开配置文件:CocConfig
    • { diagnostic.enableSign: false, }

修改vim的光标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"Mode Settings"

let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)

"Cursor settings:"

" 1 -> blinking block "
" 2 -> solid block "
" 3 -> blinking underscore "
" 4 -> solid underscore "
" 5 -> blinking vertical bar "
" 6 -> solid vertical bar "

"let &t_SI = "\<Esc>]50;CursorShape=1\x7"
"let &t_SR = "\<Esc>]50;CursorShape=2\x7"
"let &t_EI = "\<Esc>]50;CursorShape=0\x7"

vim-startify插件

插件说明: 给vim添加开始界面,并且记录历史打开的文件,显示在界面上

vim-startify 下载地址:https://github.com/mhinz/vim-startify.git

使用git下载 vim-startify 插件:

1
2
3
~$ mkdir -p ~/.vim/pack/startify/start
~$ cd ~/.vim/pack/startify/start
~$ git clone https://github.com/mhinz/vim-startify.git

fzf和fzf.vim(模糊搜索)下载

插件说明: 模糊搜索,fzf.vim依赖fzf,因此安装fzf.vim需要安装fzf

fzf 下载地址: https://github.com/junegunn/fzf.git
fzf.vim 下载地址:https://github.com/junegunn/fzf.vim.git

:point_right::fzf.vim命令说明

我的.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
"--------------------------vim设置-----------------------------------------"
set nu
set tabstop=4
syntax on
set showmode
set showcmd
set mouse=a
set encoding=utf-8
set t_Co=256
set autoindent
set cursorline
set linebreak
set showmatch
set hlsearch
set incsearch
"设置vim可以使用back键"
set backspace=2
nnoremap <C-l> :tabn<CR> "移动到下一个标签"
nnoremap <C-h> :tabp<CR> "移动到上一个标签"

"---------------------------NERDTree 设置----------------------------------"
"打开NERDTree的快捷键设置"
nnoremap <C-n> :NERDTree<CR> :set nu<CR>
"关闭NERDTree"
nnoremap <C-t> :NERDTreeToggle<CR>
"打开NERDTree,在node中选中当前文件"
nnoremap <C-f> :NERDTreeFind<CR>
"vim打开时,自动打开NERDTree,并且将光标放在文件窗口"
autocmd VimEnter * NERDTree | :set nu | wincmd p
"当NERDTree是唯一的窗口时退出vim"
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
"在每一个新的new tab打开存在的NERDTree"
"autocmd BufWinEnter * silent NERDTreeMirror "
"----------------------------gruvbox 设置----------------------------------"
"设置暗色背景"
set background=dark
"设置vim背景透明"
"autocmd vimenter * hi Normal guibg=NONE ctermbg=NONE
"配色方案设置为gruvbox"
colorscheme gruvbox
"---------------------------ranibow 设置------------------------------------"
let g:rainbow_active=1
"---------------------------修改vim的光标样式-------------------------------"
"Mode Settings"

let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)

"Cursor settings:"

" 1 -> blinking block "
" 2 -> solid block "
" 3 -> blinking underscore "
" 4 -> solid underscore "
" 5 -> blinking vertical bar "
" 6 -> solid vertical bar "

"let &t_SI = "\<Esc>]50;CursorShape=1\x7"
"let &t_SR = "\<Esc>]50;CursorShape=2\x7"
"let &t_EI = "\<Esc>]50;CursorShape=0\x7"

"---------------------------markdown preview设置---------------------------"
map <F3> :MarkdownPreview<CR> "设置 F3 开启 Markdown 文件预览
let g:mkdp_auto_start = 0 "打开文件后自动弹出, 0 为否
let g:mkdp_auto_close = 1 "关闭文件后自动关闭预览窗口, 1 为是
let g:mkdp_refresh_slow = 1 "慢速预览, 修改后退出 insert 模式后方会刷新视图, 1 为是
let g:mkdp_open_to_the_world = 0 "开启公网链接, 0 为否
let g:mkdp_browser = '' "指定浏览器, 默认会跟随系统浏览器
let g:mkdp_port = '' " 指定端口, 默认随机端口
let g:mkdp_page_title = '「${name}」' "指定浏览器窗口标题, 默认为 Markdown 文件名
let g:mkdp_preview_options = {
\ 'mkit': {},
\ 'katex': {},
\ 'uml': {},
\ 'maid': {},
\ 'disable_sync_scroll': 0,
\ 'sync_scroll_type': 'middle',
\ 'hide_yaml_meta': 1,
\ 'sequence_diagrams': {},
\ 'flowchart_diagrams': {},
\ 'content_editable': v:false,
\ 'disable_filename': 0
\ }


"-------------------------c/c++自动注释-------------------------------------"

"定义自动插入函数适用于c/c++"
function InsertExegesisC(str_list,now_line)
"得到当前文件扩展名"
let file_extend_name= expand("%:e")
"如果当前文件为c或者c++文件才执行"
if file_extend_name == "c" || file_extend_name =="cpp" || file_extend_name == "h"
let str_list=['/**']
for i in a:str_list
call extend(str_list,[" * @".i])
endfor
call extend(str_list,[" */"])
call append(a:now_line,str_list)
endif
endfunction

"函数注释"
function ExegesisFun()
let fun_str=['Name: ','Description: ','Date: '.strftime("%c"),'Author: chen jixuan','Param: ','Return: ']
call InsertExegesisC(fun_str,line(".")-1)
endfunction

"文件注释"
function ExegesisFile()
let file_str=['FileName: '.expand("%:t"),'Author: chen jixuan','Date: '.strftime("%c"),'Version: ', 'Description: ' ]
call InsertExegesisC(file_str,0)
endfunction

nnoremap <F2> :call ExegesisFun() <CR>
nnoremap <F3> :call ExegesisFile() <CR>

"-----------------------------得到当前时间------------------------------"

function GetNowTime(now_line)
let str = "Date: ".strftime("%c")
call append(a:now_line,str)
endfunction

nnoremap <F4> :call GetNowTime(line(".")-1) <CR>