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

下载后将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']

卸载插件:

  • :CocUninstall coc-css

使用CocList管理插件:

  • :CocList extensions

插件状态:

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

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

2.5.4 coc.nvim的配置文件

打开配置文件::CocConfig

👉关键字

2.5.5 例子:安装c/c++的语法补全
  1. 安装coc-clangd
    :CocInstall coc-clangd
  2. clangd有些c库支持不全需要另外添加
    • 下载MinGW或者安装vs都可以
    • 如果下载的是MinGW则将MinGW中include文件夹的路径添加到环境变量INCLUDE(没有INCLUDE则自己新建一个INCLUDE环境变量)
  3. 取消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 效果图

我的vim效果图

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐