vim常用插件安装
一、 Vim8内置插件管理方案
在Vim8这个版本Vim有了自己的插件管理方案,引入了packages的概念。用户只需要将插件放在指定的目录下,vim 就会自动加载这个插件。
假如有插件NERDTree,只需要将插件放在~$ .vim/pack/vendor/start/ 这个目录下即可。
Vim8会自动加载
~$ .vim/pack/*/start/
目录下的插件,也就是说插件也可以放在.vim/pack/NERDTree/start/下。
那些我们不想自动加载的插件可以放到opt目录下。
~$ .vim/pack/*/opt/
然后在~$ .vimrc 中使用packadd 来手动加载插件,例如:
if xxx_version > 34
packadd xxx
else
packadd xxx
endif
💻在windows中,vim的下载目录下,vim82文件夹相当于.vim文件夹,_vimrc相当于.vimrc
📓 查看文档::h packages 可以获得更多帮助信息
二、vim插件推荐及安装
参阅 Vim Awesome 获取热门插件
2.1 NERDTree插件安装及使用
2.1.1 下载NERDTree插件
NERDTree下载地址:https://github.com/preservim/nerdtree.git 使用git 下载NERDTree插件,并将插件放在vim8要求的目录:
~$ mkdir -p ~/.vim/pack/NERDTree/start
~$ cd ~/.vim/pack/NERDTree/start
~$ git clone https://github.com/preservim/nerdtree.git
2.1.2 NERDTree插件的配置
"将该配置写进.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
2.1.3 NERDTree常用快捷键
光标位置 | 快捷键 | 说明 |
---|
左侧树形目录 | s | 纵向分割窗口打开文件 | 左侧树形目录 | i | 水平分割窗口打开文件 | 左侧树形窗口 | t | 在标签页中打开 | 左侧树形窗口 | T | 在后台标签页中打开 | 左侧树形窗口 | p | 到上层目录 | 左侧树形窗口 | P | 到根目录 | 左侧树形目录 | K | 到同目录第一个节点 | 左侧树形目录 | J | 到同目录最后一个节点 | 左侧树形目录 | m | 显示文件系统菜单(添加、删除、移动操作) | 左侧树形目录 | C | 改变树的根为当前目录 | 左侧树形目录 | ? | 帮助 | 左侧树形目录 | q | 关闭 |
2.2 gruvbox插件
插件说明: 更改vim的配色
2.2.1插件安装
gruvbox 下载地址:https://github.com/morhetz/gruvbox.git 使用git 下载 gruvbox 插件,并将插件放在vim8要求的目录:
~$ mkdir -p ~/.vim/pack/gruvbox/start
~$ cd ~/.vim/pack/gruvbox/start
~$ git clone https://github.com/morhetz/gruvbox.git
2.2.2插件配置
"设置暗色背景"
set background=dark
"配色方案选用gruvbox"
colorscheme gruvbox
2.3 lightline插件
插件说明: 美化vim的状态栏
2.3.1 插件安装
lightline 下载地址:https://github.com/itchyny/lightline.vim.git
使用git 下载 lightline 插件:
~$ mkdir -p ~/.vim/pack/lightline/start
~$ cd ~/.vim/pack/lightline/start
~$ git clone https://github.com/itchyny/lightline.vim.git
2.4 Vim-Rainbow插件
插件说明: Vim-Rainbow插件会给每一对括号加一个独特的颜色,这样你就会很容易辨认,而且会让代码显的丰富多彩
Vim-Rainbow下载地址:https://github.com/kien/rainbow_parentheses.vim.git 使用git 下载 Vim-Rainbow 插件:
~$ mkdir -p ~/.vim/pack/rainbow/start
~$ cd ~/.vim/pack/rainbow/start
~$ git clone https://github.com/kien/rainbow_parentheses.vim.git
2.5 coc.nvim插件
插件说明: 代码自动补全
coc.nvim下载地址: https://github.com/neoclide/coc.nvim.git
说明: 打开上述地址,进入coc.nvim的github仓库,点击Wiki查看安装说明,以及使用说明。
2.5.1 coc.nvim安装环境要求
安装 Node.js
- linux安装
curl -sL install-node.now.sh | bash - windows安装
打开网址:https://nodejs.org/en/ ,下载安装
安装 Yarn
- linux安装
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash - windows安装
yarn的.msi下载地址
下载后将node.js和yarn均添加到环境变量
2.5.2 coc.nvim的安装
~$ 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"
2.5.3 安装coc.nvim的插件
👉coc.nvim支持的语言插件
安装插件(两种方式):
- 使用
CocInstall :CocInstall coc-json coc-css - 使用
g:coc_global_extensions 变量,当coc.nvim服务开启的时候,coc会自动加载缺失的插件 let g:coc_global_extensions = ['coc-json', 'coc-git']
卸载插件:
使用CocList 管理插件:
插件状态:
? 无效的插件* 插件处于活动状态+ 插件被加载- 插件失能
注意: 有的插件有依赖,如coc-clangd依赖clangd
2.5.4 coc.nvim的配置文件
打开配置文件::CocConfig
👉关键字
2.5.5 例子:安装c/c++的语法补全
- 安装coc-clangd
:CocInstall coc-clangd - clangd有些c库支持不全需要另外添加
- 下载MinGW或者安装vs都可以
- 如果下载的是MinGW则将MinGW中include文件夹的路径添加到环境变量INCLUDE(没有INCLUDE则自己新建一个INCLUDE环境变量)
- 取消coc-clangd的错误提示(看需求,如果库添加的不全,则引用头文件的时候,会有错误提示)
- 打开配置文件
:CocConfig { diagnostic.enableSign: false, }
2.6 修改vim的光标
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"
2.7 vim-startify插件
插件说明: 给vim添加开始界面,并且记录历史打开的文件,显示在界面上
vim-startify 下载地址:https://github.com/mhinz/vim-startify.git
使用git 下载 vim-startify 插件:
~$ mkdir -p ~/.vim/pack/startify/start
~$ cd ~/.vim/pack/startify/start
~$ git clone https://github.com/mhinz/vim-startify.git
2.8 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
👉:fzf.vim命令说明
三、我的.vimrc文件及效果图
3.1 .vimrc文件
"--------------------------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>
3.2 效果图
|