- 
                Notifications
    
You must be signed in to change notification settings  - Fork 27
 
3. 支持的语言(languages support)
基本的补全类型有:
- 1)缓冲区关键词:buf
 - 2)字典:dict
 - 3)代码片段:snips(依赖 LuaSnip 或者 ultisnips)
 - 4)路径补全:directory
 - 5)lsp 补全:需要安装对应语言的 lsp server
 
前四种类型不需要安装 lsp server,其中代码片段展开的支持需要依赖 LuaSnip(nvim)或者 ultisnips(vim)。
snippet support relies on LuaSnip (nvim) or ultisnips (vim).
支持两种方法安装 lsp 服务.
- vim/nvim: 
:InstallLspServer. - nvim: 基于 mason.nvim, 执行 
:MasonInstall {lsp-server-name} 
通过:InstallLspServer命令安装 LSP 服务的路径: ~/.config/vim-easycomplete/servers。
执行InstallLspServer命令时可以带上(语言)插件名称,也可以不带,下面两种都可以:
:InstallLspServer:InstallLspServer lua
所有支持的语言:
| 名称 | 语言 | LSP 服务 | 是否需要安装 LSP | 依赖 | 插件地址 | 
|---|---|---|---|---|---|
| path | path | No Need | 内置 | 无 | 内置 | 
| buf | buf & dict | No Need | 内置 | 无 | 内置 | 
| snips | Snippets | ultisnips/LuaSnip | 内置 | python3/lua | 内置 | 
| ts | js/ts | tsserver | Yes | node/npm | 内置 | 
| deno | js/ts | denols | Yes | deno | 内置 | 
| tn | TabNine | TabNine | Yes | 无 | 内置 | 
| vim | Vim | vimls | Yes | node/npm | 内置 | 
| cpp | C/C++/OC | clangd | Yes | 无 | 内置 | 
| css | CSS | cssls | Yes | node/npm | 内置 | 
| html | HTML | html | Yes | node/npm | 内置 | 
| yml | YAML | yamlls | Yes | node/npm | 内置 | 
| xml | Xml | lemminx | Yes | java/jdk | 内置 | 
| sh | Bash | bashls | Yes | node/npm | 内置 | 
| json | JSON | json-languageserver | Yes | node/npm | 内置 | 
| php | php | intelephense | Yes | node/npm | 内置 | 
| dart | dart | dartls | Yes | 无 | 内置 | 
| py | Python | pylsp | Yes | python3/pip3 | 内置 | 
| java | Java | jdtls | Yes | java11/jdk | 内置 | 
| go | Go | gopls | Yes | go | 内置 | 
| r | R | r-languageserver | Yes | R | 内置 | 
| rb | Ruby | solargraph | Yes | ruby/bundle | 内置 | 
| lua | Lua | sumneko_lua | 
Yes | Lua | 内置 | 
| nim | Nim | nimls | Yes | nim/nimble | 内置 | 
| rust | Rust | rust_analyzer | 
Yes | 无 | 内置 | 
| kt | Kotlin | kotlin_language_server | 
Yes | java/jdk | 内置 | 
| grvy | Groovy | groovyls | Yes | java/jdk | 内置 | 
| cmake | cmake | cmake | Yes | python3/pip3 | 内置 | 
| c# | C# | omnisharp-lsp | Yes | 无 | 内置 | 
| zig | zig | zls | Yes | zig | 内置 | 
| docker | docker | dockerfile-language-server | Mason | node/npm | easycomplete-docker | 
更多 lsp 服务相关信息:
- JavaScript & TypeScript:依赖 tsserver.
 - Python: 两个 python-language-server 分支可用:
- 
pyls 支持 python 3.5 ~ 3.10 (pyls breaks autocomplete on Python 3.11), 
pip3 install python-language-server - 
pylsp 支持 python 3.11, 
pip3 install python-lsp-server, (推荐) 
 - 
pyls 支持 python 3.5 ~ 3.10 (pyls breaks autocomplete on Python 3.11), 
 - Go: gopls. (
go get golang.org/x/tools/gopls) - Vim Script: vimls.
 - C++/C/OC:Clangd.
 - CSS: cssls. (css-languageserver),Css-languageserver 要想支持 CompletionProvider,必须依赖 Snippets,需要提前手动安装.
 - JSON: json-languageserver.
 - PHP: intelephense
 - Dart: dartls
 - HTML: html. html-languageserver 要想支持 CompletionProvider. 必须手动安装 Snippets.
 - Shell: bashls.
 - Java: jdtls, 依赖 java 11 以及更高版本.
 - Cmake: cmake.
 - Kotlin: kotlin language server.
 - Rust: rust-analyzer.
 - Lua: sumneko lua. 本地配置文件路径 
~/.config/vim-easycomplete/servers/lua/config.json. 更多信息. - Xml: lemminx.
 - Groovy: groovyls.
 - Yaml: yamlls.
 - Ruby: solargraph.
 - Nim: nimlsp. packages.json 下载非常慢, 最好手动安装,执行
choosenim,参照 文档. - Deno: denols. 使用 
:DenoCache命令来缓存当前 ts/js file. - C# : omnisharp.
 - R: r-languageserver.
 - zig: zls required.
 - docker: 安装插件 easycomplete-docker, 依赖 dockerfile-language-server.
 - TabNine: TabNine
 
可以自行增加 lsp 所支持的语言类型,当然通常情况下不需要这么做:
vimscript
" vim
let g:easycomplete_filetypes = {
      \   "sh": {
      \     "whitelist": ["shell"]
      \   },
      \   "r": {
      \     "whitelist": ["rmd", "rmarkdown"]
      \   },
      \ }luascript
-- lua
filetypes = {
    sh = {
        whitelist = {"shell"}
    },
    r = {
        whitelist = {"rmd", "rmarkdown"}
    }
}通过 lsp_server 进行配置,key 为需要设定 lsp server 的 插件源名称,比如更改 .py 的 lsp 为 "jedi-language-server":
lsp_server = {
  py = "jedi-language-server"
}需要自行安装jedi-language-server。
Vim-Easycomplete 的代码片段支持依赖 ultisnips 或 LuaSnip。只需在依赖字段中引用进来即可。性能考虑,推荐优先使用 L3MON4D3/LuaSnip(只支持 nvim),兼容考虑使用 SirVer/ultisnips(支持 vim/nvim)。 你可以增加 snippets 目录到 &runtimepath 中。
你可以设置自己的 snippets 路径:
custom snippets path for
L3MON4D3/LuaSnip:
vimscript
" vim
let g:easycomplete_custom_snippet = "./path/to/your/snippets"luascript
-- lua
vim.g.easycomplete_custom_snippet = "./path/to/your/snippets"安装 lsp :InstallLspServer tabnine.
配置 Tabnine: g:easycomplete_tabnine_config,两个配置:
- line_limit: 参与计算的行数. 越小速度越快,越大补全更准. (默认: 1000)
 - max_num_result: 在补全菜单中显示几个推荐项. (默认: 3)
 
vimscript
" vim
let g:easycomplete_tabnine_config = {
    \ 'line_limit': 1000,
    \ 'max_num_result' : 3,
    \ }luascript
-- lua
vim.g.easycomplete_tabnine_config = {
    line_limit = 1000,
    max_num_result = 3
}TabNine 不使用 APIKey 就可以运行。如果你是 Tabnine 的付费用户,可以配置 API key 获得行内补全的增强。通过在文件中敲入魔术字符Tabnine::config来激活配置面板。文档
TabNine can run without using an APIKey. If you are a paying user of Tabnine, you can configure the API key to obtain the enhancement of in-line completion. Activate the configuration panel by typing
Tabnine::config.
除了补全菜单中包含 AI 建议项之外,插件还支持行内 AI 补全提醒。有这几种方案:
Vim-easycomplete 默认支持 Tabnine。Tabnine 是本地运算补全结果的比较好的选择(最新版已经更新至 deep-tabnine,只支持云端补全),速度考虑,插件只支持了 Tabnine 的本地补全的版本。
Vim-easycomplete supports Tabnine by default. Tabnine is a relatively good choice for local completion. (the latest version has been updated to deep-tabnine, which only supports cloud mode). Considering speed, the plugin only supports the local completion version of Tabnine.
安装 :InstallLspServer tabnine.
启用 Tabnine 的行内补全 (enable inline coding supports): tabnine_suggestion = 1.
2) copilot.nvim
Tabnine 虽然运行速度快且稳定,但比较古老,行内补全推荐使用 Copilot.nvim,支持三类模型 DeepSeek、千问和 Aone。
阿里巴巴工程师,无脑使用 Aone Copilot,速度和质量都很高,ATA 上搜一下就有用 Copilot.nvim 的配置方法。