随笔 - 16  文章 - 0  评论 - 0  阅读 - 5428

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. 安装、配置

  1. 下载plug.vim: curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

  2. 编辑配置文件.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/

    该网站上有各种各样的插件,可按需求自己下载安装,里面也有安装、配置、使用说明。

  3. 配置插件

    插件安装完成后,想要使用插件的功能,必须在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++为例:

    1. 在nvim中输入命令:CocInstall coc-clangd。这一步是安装了c/c++的LSP。
    2. 在终端输入:sudo apt-get install clangd-12安装支持LSP的c/c++语法补全插件
    3. 安装成功后,输入:sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-12 100
    4. 测试是否能对c/c++补全。

    其他语言的支持类似,不懂就度娘!

    LSP:Language Server Protocol,这是一种协议,可理解为是一种标准,规范语言插件的标准。有了这个标准,只要是遵循这个协议开发的插件,可以在任何支持该协议的编辑器上运行。

    确切的说LSP是编辑器和语言工具(例如linter静态类型检查代码风格检查)之间进行通信的标准协议。

    没有LSP,不同语言需要实现这些工具与不同编辑器的通信。

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 配置==================================

posted on   rogerg6  阅读(2192)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示