vim配置

主要用于记录自己所使用的 neovim 的一些插件和配置

  1. 系统环境: WSL Debian GNU/Linux 11 (bullseye)

  2. 系统安装 nvim

sudo apt update && sudo apt install neovim -y
  1. nvm 安装

该步为了后续安装 coc.nvim 方便,有关配置如下

sudo apt install curl -y
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

执行完成后,输入 nvm -v ,如果有输出 nvm 版本,表明配置成功,接下来安装node,输入 nvm install node ,等待片刻即可

  1. 安装 vim-plug

输入

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

等待片刻即可

  1. 撰写配置文件

如果没有 ~/.config 文件夹,输入

mkdir -p ~/.config/nvim
nvim ~/.config/nvim/init.vim

这里提供我个人所使用的 init.vim 供大家参考

set expandtab sw=2 ts=2 ai
autocmd FileType make set noexpandtab
autocmd FileType python set noexpandtab

set number

call plug#begin()
Plug 'neoclide/coc.nvim',{'branch': 'release'}
Plug 'jackguo380/vim-lsp-cxx-highlight'
Plug 'rhysd/vim-clang-format'
Plug 'yuezk/vim-js'
Plug 'maxmellon/vim-jsx-pretty'
Plug 'junegunn/vim-emoji'
Plug 'bfrg/vim-cpp-modern'
Plug 'preservim/nerdtree' |
      \ Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'ryanoasis/vim-devicons'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'godlygeek/tabular'
Plug 'preservim/vim-markdown'
Plug 'shaunsingh/nord.nvim'
call plug#end()

syntax on

nnoremap gl :NERDTree<CR>
nnoremap gn <C-w><C-w>
nnoremap gc :NERDTreeClose<CR>
nnoremap gr :call CompileAndRun()<CR>
nnoremap gk :call GitAddFile()<CR>
" Page Down and Page UP
nnoremap <S-n> <C-f>
nnoremap <S-m> <C-b>
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <space> pumvisible() ? "\<C-y><space>" : "\<space>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : \"<S-Tab>"
inoremap <expr> <Enter> pumvisible() ? "\<C-y>" : "\<Enter>"
nnoremap <space> :

let g:cpp_function_highlight=1
let g:cpp_attributes_highlight=1
let g:cpp_member_highlight=1
let g:cpp_simple_highlight=1
let g:clang_format#auto_format_on_insert_leave=1
let g:NERDTreeShowHidden=1

" To disable the autofold markdown files
autocmd BufNewFile,BufRead *.md set nofoldenable

" Start NERDTree when Vim starts with a directory argument.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
    \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif

" Exit Vim if NERDTree is the only window remaining in the only tab.
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

" Start NERDTree when Vim is started without file arguments.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif

hi Pmenu ctermfg=black ctermbg=gray  guibg=#444444
hi PmenuSel ctermfg=7 ctermbg=4 guibg=#555555 guifg=#ffffff

func! CompileAndRun()
  exec "w"
  if &filetype == 'c'
    exec "!time g++ -O2 % -o %<"
    exec "term ./%<"
  elseif &filetype == 'cpp'
    exec "!time g++ -O2 % -o %<"
    exec "term ./%<"
  elseif &filetype == 'py'
    exec "term python3 %"
  endif
endfunc

func! GitAddFile()
  exec "w"
  exec "!time git add %"
endfunc

autocmd BufNewFile *.py exec":call InitFile()"
autocmd BufNewFile *.cpp exec":call InitFile()"
func! InitFile()
  if expand("%:e") == "cpp"
    call setline(1,"#include <bits/stdc++.h>")
    call setline(2,"")
    call setline(3,"using namespace std;")
    call setline(4,"")
    call setline(5,"int main(){")
    call setline(6,"  return 0;")
    call setline(7,"}")
  elseif expand("%:e") == "py"
    call setline(1,"def main():")
    call setline(2,"    return 0")
    call setline(3,"")
    call setline(4,"")
    call setline(5,"if __name__ == '__main__':")
    call setline(6,"    main()")
  endif
endfunc

然后退出 neovim (什么,你不会退出?,esc+:wq)

之后再次进入 neovim 输入 :PlugInstall ,等待片刻待其安装好后退出再次进入 neovim,基本的配置就完成了。

这个配置文件中装了很多的插件,主要使用的都映射了相应的快捷键,这里简单解释下

正常模式下的快捷键:

gl : 打开 NERDTree

gn : 在 NERDTree 和 文本编辑界面直接切换焦点

gc : 关闭 NERDTree

gr : 编译并运行简单的 c/c++ 程序,目前对于 python 的支持不完整

Shift + n : 下一页

Shift + m : 上一页

Space : 输入: 也即进入命令模式,这样退出的时候可以键入esc + space + q

插入模式的快捷键:

Tab : 如果有补全建议,在里面切换,否则正常 Tab

Space/Enter : 有选中的补全建议选中并关闭补全界面,否则原来的键

Shift + Tab : 补全界面的上一个

  1. coc.nvim 的安装与配置

在刚才的插件中添加了 coc.nvim ,这里对其做一些配置,由于我平常主力写的为 c/c++ ,因而后续介绍以 c/c++ 有关插件为主

安装的插件如下:

coc-clang-format-style-options
coc-css
coc-eslint
coc-json
coc-prettier
coc-pyright
coc-tsserver

依次在 nvim 命令模式中输入 CocInstall ${Plugin'sName} 来安装上述插件

  1. ccls 的配置

这步主要是为了能够实现 c/c++ 的自动补全

安装 ccls

sudo apt install ccls -y

然后进入 nvim,输入 :CocConfig

在打开的 json 文件中,输入如下内容

{
"languageserver": {
  "ccls":{
      "command": "ccls",
      "filetypes": ["c", "cc", "cpp", "c++", "hpp", "h"],
      "rootPatterns": [".ccls", "complie_commands.json", ".git/", ".hg/"],
      "initializationOptions": {
        "cache": {
          "directory": "./.ccls"
        },
        "highlight": {
          "lsRanges": true
        }
      }
    }
  }
}

保存退出后,测试是否安装完成

mkdir C
cd C
nvim 1.c

编写个 HelloWorld 如下,在输入的过程中你应该能看到补全的身影

#include <stdio.h>

int main(){
  printf("Hello World\n");
}
  1. clang-format的配置

由于插件中有 c/c++ 退出编辑时自动格式化,因而刚才可能会有报错,这里提供一份简单的 clang-format 教程,刚才的 coc 插件中有安装 clang-format 的有关插件,在这里的编写能提供一定的帮助

先安装 clang-format

sudo apt install clang-format -y

在用户文件夹下创建 clang-format 文件

nvim .clang-format

在里面输入如下内容

BasedOnStyle: Chromium

PointerAlignment: Right

IndentWidth: 2

MaxEmptyLinesToKeep: 1

AllowShortFunctionsOnASingleLine: false

AllowShortIfStatementsOnASingleLine: false

AlignTrailingComments: true

SpacesInSquareBrackets: false

SpacesInParentheses: true

AlignConsecutiveAssignments: false

SpaceBeforeAssignmentOperators: true

IndentWrappedFunctionNames: true

TabWidth: 2

KeepEmptyLinesAtTheStartOfBlocks: true

AllowAllParametersOfDeclarationOnNextLine: true

有关信息可以查找 clang-format 来了解,这部分是我个人所习惯的,你也可以根据自己的喜好做修改

到这里基本的配置就结束了,Enjoy it


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!