Centos Stream9 は、coc c 言語の詳細なプロセスを促す neovim コードをインストールします

Centos Stream9 が neovim コードをインストールすると、coc のインストール手順が要求されます。

1.ネオビムをインストールする

リリース · neovim/neovim · GitHub拡張性と使いやすさに重点を置いた Vim-fork。GitHub でアカウントを作成して、neovim/neovim の開発に貢献してください。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 は拒否の解決策に接続したままになります。コマンド ラインに接続すると、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言語プロンプト用サービス)のインストール

Snap Store を使用して ccls C/C++/ObjC 言語サーバーを CentOS にインストールする | Snapcraft CentOS 用の ccls C/C++/ObjC 言語サーバーの最新バージョンを入手します - C/C++/ObjC 言語サーバーhttps://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言語サーバー:

言語サーバー · neoclide/coc.nvim Wiki · GitHub vim および neovim 用の Nodejs 拡張機能ホスト、VSCode などの拡張機能をロードし、言語サーバーをホストします。- 言語サーバー · neoclide/coc.nvim Wiki https://github.com/neoclide/coc.nvim/wiki/Language-servers

おすすめ

転載: blog.csdn.net/wtl1992/article/details/131717745