• 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'), '
    ')    
      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编辑器
  • 相关阅读:
    剑指offer 51.构建乘积数组
    剑指offer 50.数组中重复的数字
    股票价格涨跌预测—基于KNN分类器
    R语言-神经网络包RSNNS
    基于客户保持率的人口特性分析
    车辆碰撞位置间的关联性分析
    统计学的七大支柱[转载@谢益辉]
    AutoDesK演示项目部署
    自定义数字键盘组件化方案
    2020年大前端发展趋势
  • 原文地址:https://www.cnblogs.com/hystill/p/13783183.html
Copyright © 2020-2023  润新知