vim配置
主要用于记录自己所使用的 neovim 的一些插件和配置
系统环境: WSL Debian GNU/Linux 11 (bullseye)
系统安装 nvim
sudo apt update && sudo apt install neovim -y- 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 ,等待片刻即可
- 安装 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'等待片刻即可
- 撰写配置文件
如果没有 ~/.config 文件夹,输入
mkdir -p ~/.config/nvimnvim ~/.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 : 补全界面的上一个
- 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} 来安装上述插件
- 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");
}- 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 协议 ,转载请注明出处!