Centos Stream9安装neovim代码提示coc c语言的详细过程

Centos Stream9安装neovim代码提示coc的安装步骤:

1、安装neovim

Releases · neovim/neovim · GitHubVim-fork focused on extensibility and usability. Contribute to neovim/neovim development by creating an account on GitHub.https://github.com/neovim/neovim/releases

下载后上传到服务器里:

wget https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz

 解压该文件:

tar -zxvf nvim-linux64.tar.gz 

 创建软连接:

cd /usr/bin
ln -s /data/soft/nvim-linux64/bin/nvim nvim

 2、配置nvim

创建nvim文件夹:

mkdir -p ~/.config/nvim

 创建并编辑init.vim文件:

nvim ~/.config/nvim/init.vim

首先对init.vim进行基础设置:

set number
set relativenumber
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set ignorecase
set smartcase
set notimeout

let mapleader = "\<SPACE>"

if empty(glob('~/.config/nvim/autoload/plug.vim'))
  :exe '!curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
              \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  au VimEnter * PlugInstall --sync | source $MYVIMRC
endif


" =======================
" ===  plugins  begin ===
" =======================
call plug#begin('~/.config/nvim/plugged')
  

  
call plug#end()
" =======================
" ===   plugins  end  ===
" =======================

 这里需要注意的是:

安装插件的时候会访问github,所以需要特殊的技术,这个你懂的。

如果配置了代理,仍然没有起作用,则需要看我的下面这篇文章:

开启了代理,但是git仍然连接拒绝的解决方法_CBAiotAigc的博客-CSDN博客windows 中 git 默认不会使用系统代理,所以即使连接代理或者打开代理软件,浏览器仍然可以访问 GitHub 或 Gitee;但是使用 git 命令行连接 GitHub 或 Gitee 远程仓库可能会出现无法访问的现象。https://wtl4it.blog.csdn.net/article/details/131743283然后重启终端,就可以流畅的安装成功了。

 3、设置主题

" highlight
  Plug 'cateduo/vsdark.nvim'

 将上面的代码放到下面的插件块中:

" =======================
" ===  plugins  begin ===
" =======================
call plug#begin('~/.config/nvim/plugged')
  
  " highlight
  Plug 'cateduo/vsdark.nvim'
  
call plug#end()
" =======================
" ===   plugins  end  ===
" =======================


" ==== cateduo/vsdark.nvim ====

set termguicolors
let g:vsdark_style = "dark"
colorscheme vsdark

 这个阶段完整的init.vim:

"===============================================
"==========   Enhance Editor ===================
"===============================================


set number
set relativenumber
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set ignorecase 
set smartcase
set notimeout
set jumpoptions=stack

let mapleader="\<SPACE>"

if empty(glob('~/.config/nvim/autoload/plug.vim'))
  :exe '!curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
              \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  au VimEnter * PlugInstall --sync | source $MYVIMRC
endif



" =======================
" ===  plugins  begin ===
" =======================
call plug#begin('~/.config/nvim/plugged')


  Plug 'cateduo/vsdark.nvim'



call plug#end()
" =======================
" ===   plugins  end  ===
" =======================




" ==== cateduo/vsdark.nvim ====
set termguicolors
let g:vsdark_style = "dark"
colorscheme vsdark

4、设置目录树插件

  " file explorer
  Plug 'preservim/nerdtree'

"===============================================
"==========   Enhance Editor ===================
"===============================================


set number
set relativenumber
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set ignorecase 
set smartcase
set notimeout
set jumpoptions=stack

let mapleader="\<SPACE>"

if empty(glob('~/.config/nvim/autoload/plug.vim'))
  :exe '!curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
              \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  au VimEnter * PlugInstall --sync | source $MYVIMRC
endif



" =======================
" ===  plugins  begin ===
" =======================
call plug#begin('~/.config/nvim/plugged')


  Plug 'cateduo/vsdark.nvim'


  " file explorer
  Plug 'preservim/nerdtree'



call plug#end()
" =======================
" ===   plugins  end  ===
" =======================




" ==== cateduo/vsdark.nvim ====
set termguicolors
let g:vsdark_style = "dark"
colorscheme vsdark



" ==== preservim/nerdtree ====
nnoremap <LEADER>e :NERDTreeToggle<CR>

 5、安装CoC代码提示功能

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

 同样的进行PlugInstall步骤:

 安装coc的时候需要nodejs、yarn的环境,所以要在系统里安装nodejs、yarn:

yum install -y epel-release
yum install -y nodejs

 配置yarn官方yum存储库

curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo
yum install -y yarn 

 5.1 安装ccls服务(c语言提示的服务)

Install ccls C/C++/ObjC Language Server on CentOS using the Snap Store | SnapcraftGet the latest version of ccls C/C++/ObjC Language Server for on CentOS - C/C++/ObjC Language Serverhttps://snapcraft.io/install/ccls/centos

yum install clang-devel
yum install llvm-devel
git clone --depth=1 --recursive https://github.com/MaskRay/ccls
cd ccls

cmake .
make

 创建软链接:

ln -s /data/soft/ccls/ccls /usr/bin/ccls

 然后在PlugInstall界面执行CocConfig命令:

 

 coc-settings.json:

{
  "suggest.labelMaxLength": 60,
  "suggest.completionItemKindLabels": {
    "class": "\uf0e8",
    "color": "\ue22b"
  },
  "cmake.formatter": "cmake-format",
  "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/"
      }
    }
  }
}

 括号补全代码:

inoremap ( ()<Esc>i
inoremap [ []<Esc>i
inoremap { {<CR>}<Esc>O
autocmd Syntax html,vim inoremap < <lt>><Esc>i| inoremap > <c-r>=ClosePair('>')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap } <c-r>=CloseBracket()<CR>
inoremap " <c-r>=QuoteDelim('"')<CR>
inoremap ' <c-r>=QuoteDelim("'")<CR>

function ClosePair(char)
 if getline('.')[col('.') - 1] == a:char
 return "\<Right>"
 else
 return a:char
 endif
endf

function CloseBracket()
 if match(getline(line('.') + 1), '\s*}') < 0
 return "\<CR>}"
 else
 return "\<Esc>j0f}a"
 endif
endf

function QuoteDelim(char)
 let line = getline('.')
 let col = col('.')
 if line[col - 2] == "\\"
 return a:char
 elseif line[col - 1] == a:char
 return "\<Right>"
 else
 return a:char.a:char."\<Esc>i"
 endif
endf

6、最全的init.vim

"===============================================
"==========   Enhance Editor ===================
"===============================================


set number
set relativenumber
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set ignorecase 
set smartcase
set notimeout
set jumpoptions=stack

let mapleader="\<SPACE>"

if empty(glob('~/.config/nvim/autoload/plug.vim'))
  :exe '!curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
              \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  au VimEnter * PlugInstall --sync | source $MYVIMRC
endif



" =======================
" ===  plugins  begin ===
" =======================
call plug#begin('~/.config/nvim/plugged')


  Plug 'cateduo/vsdark.nvim'


  " file explorer
  Plug 'preservim/nerdtree'
  
  " lsp
  Plug 'neoclide/coc.nvim', {'branch': 'release'}



call plug#end()
" =======================
" ===   plugins  end  ===
" =======================




" ==== cateduo/vsdark.nvim ====
set termguicolors
let g:vsdark_style = "dark"
colorscheme vsdark



" ==== preservim/nerdtree ====
nnoremap <LEADER>e :NERDTreeToggle<CR>



" ==== 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
" <TAB> to select candidate forward or
" pump completion candidate
inoremap <silent><expr> <TAB>
      \ pumvisible() ? "\<C-n>" :
      \ <SID>check_back_space() ? "\<TAB>" :
      \ coc#refresh()
" <s-TAB> to select candidate backward
inoremap <expr><s-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
  let col = col('.')-1
  return !col || getline('.')[col - 1] =~# '\s'
endfunction

" <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>"
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()



inoremap <expr> <cr> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"


inoremap ( ()<Esc>i
inoremap [ []<Esc>i
inoremap { {<CR>}<Esc>O
autocmd Syntax html,vim inoremap < <lt>><Esc>i| inoremap > <c-r>=ClosePair('>')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap } <c-r>=CloseBracket()<CR>
inoremap " <c-r>=QuoteDelim('"')<CR>
inoremap ' <c-r>=QuoteDelim("'")<CR>

function ClosePair(char)
 if getline('.')[col('.') - 1] == a:char
 return "\<Right>"
 else
 return a:char
 endif
endf

function CloseBracket()
 if match(getline(line('.') + 1), '\s*}') < 0
 return "\<CR>}"
 else
 return "\<Esc>j0f}a"
 endif
endf

function QuoteDelim(char)
 let line = getline('.')
 let col = col('.')
 if line[col - 2] == "\\"
 return a:char
 elseif line[col - 1] == a:char
 return "\<Right>"
 else
 return a:char.a:char."\<Esc>i"
 endif
endf

效果:

CoC Language Server:

Language servers · neoclide/coc.nvim Wiki · GitHubNodejs extension host for vim & neovim, load extensions like VSCode and host language servers. - Language servers · neoclide/coc.nvim Wikihttps://github.com/neoclide/coc.nvim/wiki/Language-servers

猜你喜欢

转载自blog.csdn.net/wtl1992/article/details/131717745
今日推荐