vim、neovim插件安装配置
vim、neovim插件安装配置
2022年7月10日17:40:32 written by rogerg6
vim是unix/Linux终端下的文本编辑器,vim是vi的改进版。neovim是vim的重构版本。两者在操作上几乎一样。
在vim中想要编写代码,实现语法高亮、目录树、编辑栏等等功能,插件适合这种场景。当需要安装众多插件时,管理插件是个问题,还好我们有现成的工具。常见的有Vundle、vim-plug......
这里我以vim-plug,nvim为例讲解安装、配置插件的步骤,其他管理工具类似:
1. vim、neovim的一些配置文件
Vim | NeoVim | |
---|---|---|
plug.vim安装路径 | ~/.vim/autoload | ~/.config/nvim/autoload |
配置文件 | ~/.vimrc | ~/.config/nvim/init.vim |
插件下载路径(可自定义) | ~/.vim/plugged | 同左边 |
其中:
- plug.vim可以认为是vim-plug则个工具的程序(其实是个脚本,猜测nvim启动是会运行该脚本)。安装路径官方默认如上表
- 2者配置文件内容其实一样,只是路径不一样,可以创建一个软链接
- 插件下载路径,可以自定义,但是一定要写在.vimrc中:
call plug#begin('~/.vim/plugged')
2. 安装、配置
-
下载plug.vim:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
-
编辑配置文件.vimrc,将一下内容写入,在nvim中运行
:PlugInstall
安装:" 将需要安装的插件放在下面2行代码间 call plug#begin('~/.vim/plugged') Plug 'scrooloose/nerdtree' Plug 'majutsushi/tagbar' Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'voldikss/vim-floaterm' call plug#end()
其中,物色插件及.vimrc中插件语法见:https://vimawesome.com/
该网站上有各种各样的插件,可按需求自己下载安装,里面也有安装、配置、使用说明。
-
配置插件
插件安装完成后,想要使用插件的功能,必须在nvim中运行命令,如
:FloatermNew
。所以不是很方便,需要对其进行配置。配置的方法也是在.vimrc中写入相应的脚本,见最后的.vimrc文件内容。
3. 常用插件
-
NERDTree:目录树
-
Tagbar:标记栏。显示当前源代码文件中的函数、类等骨干信息
-
vim-floaterm:内嵌在nvim中的终端。可实现在不退出编辑页面的情况下操作CLI。对nvim支持较好
-
coc.vim:补全插件。
这个插件比较特殊,它依赖于nodejs(v16.0以上),且nvim对其支持较好,所以安装它之前先安装nodejs:
去官网下载:https://nodejs.org/zh-cn/download/ tar -xvf node-v16.16.0-linux-x64.tar.gz sudo mv node-v16.16.0-linux-x64 /usr/local/lib vim ~/.profile export PATH=$PATH:/usr/local/lib/node-v16.1.0-linux-x64/bin 重启终端,输入node -v,如下即安装成功: v16.1.0
coc其实是一个平台,针对各种语言(c, c++, python...)的插件需要安装到coc上才能补全相应的语言。
以c/c++为例:
- 在nvim中输入命令:
CocInstall coc-clangd
。这一步是安装了c/c++的LSP。 - 在终端输入:
sudo apt-get install clangd-12
安装支持LSP的c/c++语法补全插件 - 安装成功后,输入:
sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-12 100
- 测试是否能对c/c++补全。
其他语言的支持类似,不懂就度娘!
LSP:Language Server Protocol,这是一种协议,可理解为是一种标准,规范语言插件的标准。有了这个标准,只要是遵循这个协议开发的插件,可以在任何支持该协议的编辑器上运行。
确切的说:
LSP
是编辑器和语言工具(例如linter
、静态类型检查
、代码风格检查
)之间进行通信的标准协议。没有
LSP
,不同语言需要实现这些工具与不同编辑器的通信。 - 在nvim中输入命令:
4. 我的.vimrc
set nocompatible " 去除VI一致性,必须要添加
filetype off " 必须要添加
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
Plug 'majutsushi/tagbar'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'voldikss/vim-floaterm'
call plug#end() " 必须
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" ============= vim-floaterm配置=========================
nnoremap <silent> <F7> :FloatermNew --height=0.9 --position=bottomright<CR>
tnoremap <silent> <F7> <C-\><C-n>:FloatermNew --height=0.9 --position=bottomright<CR>
nnoremap <silent> <F8> :FloatermPrev<CR>
tnoremap <silent> <F8> <C-\><C-n>:FloatermPrev<CR>
nnoremap <silent> <F9> :FloatermNext<CR>
tnoremap <silent> <F9> <C-\><C-n>:FloatermNext<CR>
nnoremap <silent> <F12> :FloatermToggle<CR>
tnoremap <silent> <F12> <C-\><C-n>:FloatermToggle<CR>
" ============ vim-floaterm配置=========================
" =============NERDTree配置=========================
" 打开/关闭 快捷键配置,通过快捷键ctr + n,进行项目树的切换
nmap ,q :NERDTreeToggle<CR>
" 进入选中的目录中
nmap ,d cdCD
" 当打开vim无指定文件时,自动打开项目树
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 当所有文件都关闭时,自动关闭项目树窗格
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" 不显示下述文件
let NERDTreeIgnore=['\.pyc$', '\~$', 'node_modules'] "ignore files in NERDTree
" 不显示项目树上额外的信息,例如帮助、提示什么的
let NERDTreeMinimalUI=1
" 更改默认箭头
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
let NERDTreeWinSize=20
" =============NERDTree配置=========================
" ===============TagBar配置======================
map ,t :TagbarToggle<CR>
let g:tagbar_width=20
let g:tagbar_iconchars = ['+', '-']
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
" ===============TagBar配置======================
" 设置字符编码
set fileencoding=utf-8
set fileencodings=utf-8,gb2312,gb18030,latin1
set termencoding=utf-8
set encoding=utf-8
" 语法高亮
syntax on
" 检测文件类型
filetype on
" 根据文件类型加载对应的插件
filetype plugin on
runtime macros/matchit.vim
" 显示行号
set number
" 高亮显示当前行
set cursorline
" 设置各种缩进
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set smartindent
set cindent
" tab转换为空格
set expandtab
" 将ESC键映射为ctrl+j
" inoremap <C-j> <Esc>
" 自动完成大括号
"imap { {<CR>}<Esc>kA<CR>
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
"inoremap { {<CR>}<ESC>O
inoremap { {}<ESC>i
"设置跳出自动补全的括号
func SkipPair()
if getline('.')[col('.') - 1] == ')' || getline('.')[col('.') - 1] == ']' || getline('.')[col('.') - 1] == '"' || getline('.')[col('.') - 1] == "'" || getline('.')[col('.') - 1] == '}'
return "\<ESC>la"
else
return "\t"
endif
endfunc
" 将tab键绑定为跳出括号
inoremap <TAB> <c-r>=SkipPair()<CR>
" 键盘映射
" 添加注释
nmap zs ^i/* */<CR><Esc>`.hi
" 缩进
nmap <TAB> V>
nmap <s-TAB> V<
" 相当于输入%:h<Tab>
cnoremap <expr> %% getcmdtype( ) == ':' ? expand('%:h').'/' : '%%'
" 插入模式下插入时间
inoremap <F5> <C-R>=strftime('%Y-%m-%d %H:%M:%S')<CR>
" =========================COC 配置==================================
colors ron
" 提示框的颜色和选中的颜色
hi Pmenu ctermfg=0 ctermbg=7
hi PmenuSel ctermfg=0 ctermbg=11
"hi CocFloating ctermfg=black ctermbg=240
hi cComment ctermfg=Grey
hi CocErrorFloat ctermfg=0
" =========================COC 配置==================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!