neovim环境搭建
neovim环境搭建
安装新版本neovim
sudo apt install software-properties-common
sudo apt update
sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt install neovim
nvim --version
创建nvim的配置文件
mkdir -p ~/.config/nvim/
nvim ~/.config/nvim/init.vim
安装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'
编辑init.vim文件,添加内容:
call plug#begin('~/.vim/plugged')
call plug#end()
在call begin和call end 之间加上插件就可以使用了,使用命令 :PlugInstall安装
安装vscode颜色主题
Plug 'cateduo/vsdark.nvim'
编辑init.vim文件,添加内容:
" ==== cateduo/vsdark.nvim ====
set termguicolors
let g:vsdark_style = "dark"
colorscheme vsdark
安装nerdtree
Plug 'preservim/nerdtree'
编辑init.vim文件,添加内容:
" ==== preservim/nerdtree ====
let NERDTreeMinimalUI=1
let NERDTreeWinSize=20
nnoremap <C-e> :NERDTreeToggle<CR>
" Start NERDTree and put the cursor back in the other window.
"autocmd VimEnter * NERDTree | wincmd p
" 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
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif" Open the existing NERDTree on each new tab.
autocmd BufWinEnter * if getcmdwintype() == '' | silent NERDTreeMirror | endif
安装coc.nvim
Plug 'neoclide/coc.nvim', {'branch': 'release'}
编辑init.vim文件,添加内容:
" ==== neoclide/coc.nvim ====
" coc extensions
let g:coc_global_extensions = [
\ 'coc-json',
\ 'coc-tsserver',
\ 'coc-css',
\ 'coc-html',
\ 'coc-vimlsp',
\ 'coc-cmake',
\ 'coc-highlight',
\ 'coc-pyright'
\ ]
set signcolumn=number
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: There's always complete item selected by default, you may want to enable
" no select by `"suggest.noselect": true` in your configuration file.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
" <CR> to comfirm selected candidate
" only when there's selected complete item
if exists('*complete_info')
" inoremap <silent><expr> <CR> complete_info(['selected'])['selected'] != -1 ? "\<C-y>" : "\<C-g>u\<CR>"
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
endif
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if(index(['vim', 'help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
elseif (coc#rpc#ready())
call CocActionAsync('doHover')
else
execute '!' . &keywordprg . " " . expand('<cword>')
endif
endfunction
" highlight link CocHighlightText Visual
" autocmd CursorHold * silent call CocActionAsync('highlight') " TODO
nmap <leader>rn <Plug>(coc-rename)
xmap <leader>f <Plug>(coc-format-selected)
command! -nargs=0 Format :call CocAction('format')
augroup mygroup
autocmd!
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end
" diagnostic info
nnoremap <silent><nowait> <LEADER>d :CocList diagnostics<CR>
nmap <silent> <LEADER>- <Plug>(coc-diagnostic-prev)
nmap <silent> <LEADER>= <Plug>(coc-diagnostic-next)
nmap <LEADER>qf <Plug>(coc-fix-current)
" Remap <C-f> and <C-b> for scroll float windows/popups.
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<C-r>=coc#float#scroll(1)\<CR>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<C-r>=coc#float#scroll(0)\<CR>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" statusline support
" set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} "TODO
" GoTo code navigation.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gD :tab sp<CR><Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
function! s:generate_compile_commands()
if empty(glob('CMakeLists.txt'))
echo "Can't find CMakeLists.txt"
return
endif
if empty(glob('.vscode'))
execute 'silent !mkdir .vscode'
endif
execute '!cmake -DCMAKE_BUILD_TYPE=debug
\ -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -S . -B .vscode'
endfunction
command! -nargs=0 Gcmake :call s:generate_compile_commands()
安装lsp依赖
- 安装pip
sudo apt install python3-pip
sudo apt install python3-venv
pip3 install jedi
pip3 install jedi-language-server
- 安装高版本node
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n stable
- 安装yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn
- 查看版本
node --version // v16.14.2, node版本需要大于12.0.0
npm --version // 8.5.0
- npm配置国内镜像
sudo npm config set registry https://registry.npm.taobao.org
配置neovim
mkdir -p ~/.config/nvim
cd ~/.config/nvim
touch init.vim
- 设置en_US.UTF-8
sudo apt install -y locales
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
sudo locale-gen en_US.UTF-8
- 编辑文档 /etc/default/locale
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
安装ccls
sudo apt install ccls
打开init.vim文件,输入命令:
CocConfig
- 添加如下配置:
{
"languageserver": {
"ccls": {
"command": "ccls",
"filetypes": [ "c", "cc", "cpp", "c++", "objc", "objcpp" ],
"rootPatterns": [ "compile_commands.json", ".git/", ".hg/", ".vscode", ".vim/" ],
"initializationOptions": {
"highlight": {"lsRanges": true},
"cache": {
"directory": "/tmp/ccls"
},
"clang": {
"resourceDir": "/usr/lib/clang/13.0.0"
},
"completion": {
"detailedLable": true,
"placeholder": true
},
"index": {
"onChange": false,
"initialNoLinkage": true,
"threads": 2
},
"compilationDatabaseDirectory": ".vscode/"
}
}
}
}
安装C/C++语法高亮
Plug 'jackguo380/vim-lsp-cxx-highlight'
编辑init.vim文件,添加内容:
" ==== jackguo380/vim-lsp-cxx-highlight ====
hi default link LspCxxHlSymFunction cxxFunction
hi default link LspCxxHlSymFunctionParameter cxxParameter
hi default link LspCxxHlSymFileVariableStatic cxxFileVariableStatic
hi default link LspCxxHlSymStruct cxxStruct
hi default link LspCxxHlSymStructField cxxStructField
hi default link LspCxxHlSymFileTypeAlias cxxTypeAlias
hi default link LspCxxHlSymClassField cxxStructField
hi default link LspCxxHlSymEnum cxxEnum
hi default link LspCxxHlSymVariableExtern cxxFileVariableStatic
hi default link LspCxxHlSymVariable cxxVariable
hi default link LspCxxHlSymMacro cxxMacro
hi default link LspCxxHlSymEnumMember cxxEnumMember
hi default link LspCxxHlSymParameter cxxParameter
hi default link LspCxxHlSymClass cxxTypeAlias
安装文件搜索插件
Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension
打开init.vim文件,输入命令:
" ==== Yggdroot/LeaderF ====
let g:Lf_WindowPosition='right'
let g:Lf_PreviewInPopup=1
let g:Lf_CommandMap = {
\ '<C-p>': ['<C-k>'],
\ '<C-k>': ['<C-p>'],
\ '<C-j>': ['<C-n>']
\}
nmap <leader>f :Leaderf file<CR>
nmap <leader>b :Leaderf! buffer<CR>
nmap <leader>F :Leaderf rg<CR>
let g:Lf_DevIconsFont = "DroidSansMono Nerd Font Mono"

浙公网安备 33010602011771号