Vim配置

请注意,本文编写于  190  天前,最后编辑于  190  天前,内容可能已经不具有时效性,请谨慎参考。

Vim配置

虽然大多数用的Vscode,但是偶尔碰到一些情况需要用终端的vim,所以花了点时间做了简单的配置,这里做一下记录,方便以后使用。大概效果是这样,更多的就不再折腾了。
image.png

1. vim-plug插件管理

使用vim-plug进行管理
在linux环境下安装

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

安装插件

编辑.vimrc文件
Example

call plug#begin()
	" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
	Plug 'fatih/vim-go', { 'tag': '*' }
call plug#end()

最后:PlugInstall就行了

卸载插件

.vimrc中的插件行删除
执行:PlugClean

查看插件

执行:PlugStatus可以查看目前安装了哪些插件

2. 配置C++编辑环境

coc.nvim

使用coc.nvim作为代码补全工具,需要nodejs
这里我们不能直接使用apt-get install nodejs,这样版本太低
首先执行

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

然后

sudo apt install nodejs

然后加入coc插件

 Plug 'neoclide/coc.nvim', {'branch': 'release'} 

然后安装,安装完后需要执行:CocInstall coc-clangd
同时我们需要安装clangd

sudo apt-get install clangd

tarbar

加入插件安装

 Plug 'majutsushi/tagbar'

需要配合ctags使用

sudo apt-get install ctags

3. 配置Go安装环境

安装go

到 golang.org 将安装包下载,并配置好环境, 推荐使用二进制版本,下载完成后直接解压缩就可以使用。如果无法访问 go 官网,可以考虑去 golang.google.cn 去下载。

sudo tar xzvf go1.xx.linux-amd64.tar.gz -C /usr/local/

配置 PATH 及 GOPATH
创建 Go 的工作空间(目录)
这是默认的位置,也可以按照需求指定到其他目录

mkdir -p $HOME/go/{bin,pkg,src}

配置环境变量
.zshrc中加入

export GOPATH=$HOME/go
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

然后

source ~/.zshrc

安装vim-go插件

vimrc中加入

" go 主要插件"
Plug 'fatih/vim-go', { 'tag': '*' }
" go 中的代码追踪,输入 gd 就可以自动跳转
Plug 'dgryski/vim-godef'

安装完后输入:GoInstallBinaries
等待Go相关包安装完毕,中间可能出现下载失败的情况
终端输入

go env -w GOPROXY=https://goproxy.cn,direct

同样,代码补全需要

:CocInstall coc-go

4. 插件集合

nerdtree

这里配置了映射

键位功能
leader+nn:NERDTreeToggle
leader+nb:NERDTreeBookmark
leader+nf:NERDTreeFind

tagbar

键位功能
F9:TagbarToggle

LeaderF

键位功能
leader+f查找文件
leader+b查找buffer
:LeaderfFunction查找函数

常用快捷键

键位功能
leader+t下方打开终端
esc在终端中推出到normal模式
exit退出终端

最后完整的vimrc文件

let mapleader = "\<space>"

map <leader>nn :NERDTreeToggle<cr>
map <leader>nb :NERDTreeBookmark
map <leader>nf :NERDTreeFind<cr>
nmap LH 0
nmap LT $
nmap <leader>t :below term<CR>
:tnoremap <Esc> <C-\><C-n>


set termwinsize=5x0
set relativenumber
set laststatus=2
set showmatch
set autoindent
set showcmd
set ai              " 自动缩进
set si              " 智能缩进
set cindent         " C/C++风格缩进
set cursorline
filetype plugin indent on

let g:lightline={
      \ 'colorscheme' : 'wombat',
      \ }

set tabstop=4 " 设置Tab长度为4空格
set shiftwidth=4 " 设置自动缩进长度为4空格
set autoindent " 继承前一行的缩进方式,适用于多行注释

call plug#begin()

  Plug 'preservim/nerdtree'
    
  Plug 'mhinz/vim-startify'

  Plug 'itchyny/lightline.vim'

  " 可以使 nerdtree 的 tab 更加友好些
  Plug 'jistr/vim-nerdtree-tabs'

  " 可以在导航目录中看到 git 版本信息
  Plug 'Xuyuanp/nerdtree-git-plugin'

  " 查看当前代码文件中的变量和函数列表的插件,
  " 可以切换和跳转到代码中对应的变量和函数的位置
  " 大纲式导航, Go 需要 https://github.com/jstemmer/gotags 支持
  Plug 'majutsushi/tagbar'
  Plug 'neoclide/coc.nvim', {'branch': 'release'}
  " 自动补全括号的插件,包括小括号,中括号,以及花括号
  Plug 'jiangmiao/auto-pairs'

  " 代码自动完成,安装完插件还需要额外配置才可以使用
  " Plug 'Valloric/YouCompleteMe'

  " 可以在文档中显示 git 信息
  Plug 'airblade/vim-gitgutter'


  " 下面两个插件要配合使用,可以自动生成代码块
  Plug 'SirVer/ultisnips'
  Plug 'honza/vim-snippets'

  " 可以在 vim 中使用 tab 补全
  "Plug 'vim-scripts/SuperTab'

  " 可以在 vim 中自动完成
  "Plug 'Shougo/neocomplete.vim'


  " 配色方案
  " colorscheme neodark
  Plug 'KeitaNakamura/neodark.vim'
  " colorscheme monokai
  Plug 'crusoexia/vim-monokai'
  " colorscheme github
  Plug 'acarapetis/vim-colors-github'
  " colorscheme one
  Plug 'rakr/vim-one'

  " go 主要插件
  Plug 'fatih/vim-go', { 'tag': '*' }
  " go 中的代码追踪,输入 gd 就可以自动跳转
  Plug 'dgryski/vim-godef'
  Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }


  Plug 'scrooloose/nerdcommenter'
call plug#end()

set termguicolors
colorscheme one
set background=dark

let g:NERDSpaceDelims=1 " 注释后加空格

"==============================================================================
"  majutsushi/tagbar 插件
"==============================================================================

" majutsushi/tagbar 插件打开关闭快捷键
nmap <F9> :TagbarToggle<CR>

let g:tagbar_type_go = {
    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
        \ 'i:imports:1',
        \ 'c:constants',
        \ 'v:variables',
        \ 't:types',
        \ 'n:interfaces',
        \ 'w:fields',
        \ 'e:embedded',
        \ 'm:methods',
        \ 'r:constructor',
        \ 'f:functions'
    \ ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
    \ },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
    \ },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
\ }

let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"