vim利用coc補全的配置過程


  • 題外話,國內的博客為什么都是抄來抄去呢,還是要自己實踐一下

  • coc插件原理 vscode 補全利用的是LSP (language server protocol), 簡單理解就是編輯時啟動一個進程,補全過程就類似app請求服務器得到補全數據。這就是為什么要裝node,服務進程都是node啟動。

第一步 安裝nvim

  • 首先你需要 安裝vim8 或者nvim 我測試的是macos
  • 如果是nvim, 需要把nvim 的配置文件做一次軟鏈接指向 ~/.vimrc 這是延續以前的vim配置方式, 不做的話,只能修改./config/nvim/init.vim , 因為nvim的配置默認讀取這個文件。
  • 以下提到的vim都是指的nvim,我在/etc/profile alias vim=“nvim” 了
ln -s ~/.config/nvim/init.vim ~/.vimrc

第二步 安裝nvim插件管理器 Vim-plug

curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

第三步 安裝coc插件

  • 以上兩步完成之后,可以添加coc插件,我的配置如下
set nu  " 顯示行號  
" 插件列表    
" 插件加載目錄 .config/nvim/plugged ,也可以是.vim/plugged 隨便都可以, 以后太會下載到這個目錄,啟動vim也會加載這里的插件

call plug#begin('~/.config/nvim/plugged')  " 開始語句    
Plug 'neoclide/coc.nvim', {'branch': 'release'}   " 這是coc.nvim 插件
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }    " 這是go語言補全需要的插件
    
call plug#end() " 結束語句
    
let s:script_cwd = expand('<sfile>:p:h')    
let s:source_list = [    
      \ 'viml',    
      \ 'config',    
      \]    
    
for s:item in s:source_list    
  let s:path = split(globpath(s:script_cwd . '/' . s:item, '*.vim'), '\n')    
  for s:cfg in s:path    
    if filereadable(s:cfg)    
      execute 'source ' . s:cfg    
    endif    
  endfor    
endfor    
    
unlet s:script_cwd    
unlet s:source_list    
    
" 這兩句是針對go插件的配置設定
let g:go_def_mode='gopls'    
let g:go_info_mode='gopls'    
  • 其余的配置我也不太清楚,暫且不管,最終要的是結果是利用coc補全各種語言…

第四步 如何安裝php補全插件

  • 各種語言coc擴展這里有

  • coc-phpactor 是php7以上才可以用

  • coc-phpls 一般都用這個

  • 第一步 需要安裝Intelephense

    npm i intelephense -g
    
  • 第二步打開vim, 安裝coc-phpls

    CocInstall coc-phpls
    
  • 第三步 配置php language server

    • vim : CocConfig
    • 會默認打開一個配置文件
    ```
      {    
        "languageserver": {    
      	 "intelephense": {    
      		"command": "intelephense",    
      		"args": ["--stdio"],    
      		"filetypes": ["php"],    
      		"initializationOptions": {    
      			"storagePath": "/Users/kunming/php/"    
      		}    
      	}
      }
    ```
    
    • 這里外面的intelephense表示配置的名稱
    • command里面的intelephense是一個文件
    • args 表示可執行文件后面的參數
    • 比如你打開一個php文件,ps命令可以看到系統會啟動一個進程 node /usr/local/bin/intelephense --stdio
    • 有一個索引js的進程/usr/local/bin/node --no-warnings /Users/kunming/.SpaceVim/plugged/coc.nvim/build/index.js
    • node還會啟動一個進程類似這樣/usr/local/Cellar/node/14.1.0/bin/node /Users/kunming/.config/coc/extensions/node_modules/coc-phpls/node_modules/intelephense/lib/intelephense.js --node-ipc --clientProcessId=72264
    • filetypes 指定了對php文件有效
    • storagePath 表示初始化信息存儲的位置,據我觀察應該是打開一個文件,進程為php建立補全信息建立的索引日志文件,安裝intelephense,會附帶好多php文件,常見的php庫,也是為了建立索引用的,初次編輯一個php文件,這個目錄會有28872930這樣的文件夾生成。
    • 最重要的:只有你在storagePath目錄下建立的php文件或者項目,vim編輯才會出現補全提示,在別的目錄是沒有提示的,這一點研究了好久才感覺出來,文檔也沒說這些。

其余插件,我只安裝了go的coc擴展和python的coc擴展,go擴展需要提前安裝fatih/vim-go來支持

  • 同樣每次編輯他們的文件都會啟動一個類似node進程/usr/local/bin/node --no-warnings /Users/kunming/.SpaceVim/plugged/coc.nvim/build/index.js
  • 都是一個套路:
    1. 找到所需的插件,比如coc-python 安裝他需要的依賴,一般插件后面會提到
    1. vim中安裝coc擴展 CocInstall coc-python
    1. vim來打配置CocConfig,添加對應語言的server配置
    1. 所以LSP是一個cs結構的,有服務端也就是node進程, 客戶端就是vim編輯器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM