Skip to content

Latest commit

 

History

History
274 lines (203 loc) · 16.3 KB

ReadMe-cn.md

File metadata and controls

274 lines (203 loc) · 16.3 KB
          ──────────────────────────────────────────────────
          ─██████████████─██████████████─████████──████████─
          ─██░░░░░░░░░░██─██░░░░░░░░░░██─██░░░░██──██░░░░██─
          ─██░░██████████─██░░██████████─████░░██──██░░████─
          ─██░░██─────────██░░██───────────██░░░░██░░░░██───
          ─██░░██████████─██░░██───────────████░░░░░░████───
          ─██░░░░░░░░░░██─██░░██─────────────████░░████─────
          ─██░░██████████─██░░██───────────────██░░██───────
          ─██░░██─────────██░░██───────────────██░░██───────
          ─██░░██████████─██░░██████████───────██░░██───────
          ─██░░░░░░░░░░██─██░░░░░░░░░░██───────██░░██───────
          ─██████████████─██████████████───────██████───────
          ──────────────────────────────────────────────────

          EASILY COMPLETE YOU.


English | 中文版文档(当前)

介绍

  1. 自动兼容 YCM, 可以作为YCM的补充。
  2. 流畅的补全.
  3. 使用 Python3 编写.
  4. 类似YCM的模糊匹配.
  5. 内置 LSP.
  6. 开箱即用.

运行截图 -->>>>

怎么安装

依赖

  1. Python >= 3.0
    强烈建议使用 python3.6以上版本
    How to get python support for vim?
  2. Vim >= 8.0
    强烈建议使用最新的vim(Vim 8.2).

安装

途径 1:

使用插件管理插件 例如:Plug-vim or Vunble:
把下面一代代码插入,然后安装即可.

Plug 'https://gitee.com/Jimmy_Huang/EasyCompleteYou'

途径 2:

下载整个工程,然后让vim能索引到ECY,即把ECY的工程目录放进vim的 runtimepath.

途径 3:

新手? 不知道怎么安装插件? 没关系
这里 看看.

使用

当你成功地安装ECY后, 会有三个默认安装的引擎 : label, pathpython.

当你打开一个文件的时候,ECY会首先检测该文件的文件类型(filetype). 得知文件类型后, ECY客户端会向服务端请求 该文件类型可以使用哪些 引擎.

所以, 如果你想某个特定的引擎在某个文件也可以被使用的话。 你可以通过vim命令: :set &filetype=java 来修改文件类型,从而使ECY生效.

同样的,如果你想知道当前有什么引擎可以在当前文件使用,你可以在vim的normal mode 按下 <Tab> 来查看。 默认使用的是<Tab> 你可以通过变量 g:ECY_show_switching_source_popup来改变默认按键.

如何修改默认按键?

开箱即用是 ECY的宗旨。
所有的默认值都可以通过修改变量来改变。
例如: 把let g:ECY_expand_snippets_key = '<F7>' 放入 vimrc.
就可以修改展开片段按键 的默认值。

启用更多引擎.

三个默认引擎能满足的人太少了. 如果你想ECY也可以在前端工作 HTML 工作的话, 你可以在vim中通过命令: :call ECY_Installer('HTML_LSP') 来启用HTML 引擎.
重要提示: 当前启用一个新的引擎的使用,请确保 对应新引擎的依赖环境已经准备好了。 所以,在你安装一个新的引擎之前,请仔细阅读对应文档.

注意: 没有安装 Ultisnips 就不能使用 snippets-expanding , 没有安装 LeaderF 就不能使用goto-definition, goto-declaration, find-symbols, find-reference

下列是在ECY完整的,目前可使用的引擎 :

名字 编程语言 可用特性 运行依赖 详细文档
label all completion -
snippet all completion
snippets-expanding
-
path all completion -
python_jedi python completion
diagnosis
goto-definition
find-symbols
goto-declaration
find-reference
snippets-expanding
jedi
pyflakes
html_lsp html, xhtml completion
diagnosis
snippet-expanding
find-symbols
nodejs
html-LSP
HTMLHint
Home
vim_lsp vimL completion
diagnosis
snippet-expanding
find-symbols
nodejs
vim-LSP
go_langserver golang completion
snippets-expanding
go-langserver
go_gopls golang completion
diagnosis
snippets-expanding
goto-definition
goto-reference
gopls
clangd C/C++/C-family completion
diagnosis
goto-definition
find-symbols
goto-declaration
find-reference
snippets-expanding
clangd

ECY的插件.

跟上面的引擎其实是一样,只不过单独开一个仓库来管理而已。

name programming language abilities dependence link
dictionary all completion - Home
latex latex completion
diagnosis
snippet-expanding
find-symbols
TexLab
vimtex
Home
snippets_preview all - - Home

配合 Ultisnips 使用

Ultisnips 是一个单独开发和维护的插件,所以你必须要单独地安装它.
我们强烈建议你安装 Ultisnips 以获得最好的ECY体验

首先你要 查阅 Ultisnips 的文档, 其默认的 g:UltiSnipsExpandTrigger 值是 '<Tab>', 但是这个默认值与ECY的 g:ECY_select_items冲突了.

所以 你必须二选一. 但是 ECY 已经帮你选择好了, 当你安装好ECY后, 会把 g:UltiSnipsExpandTrigger 自动地改变为 '<F1>'.

还有更优雅的展开方式,当 ECY 正在提示的时候,你可以按下 g:ECY_expand_snippets_key (默认值为 '<CR>')来展开 代码片段 .

一些很有用的 tips of Ultisnips.

g:UltiSnipsJumpForwardTrigger -- 默认值: <c-j>
g:UltiSnipsJumpBackwardTrigger -- 默认值: <c-k>

配合 LeaderF 使用

LeaderF 是一个单独开发和维护的插件,所以你必须要单独地安装它.
我们强烈建议你安装 Ultisnips 以获得最好的ECY体验

LeaderF 能为ECY做什么? 帮助ECY提供UI等功能给用户,让用户选择. 所以如果你没有 LeaderF 的话,你可以在ECY中无法使用一些功能,例如: Goto-definition .

一些很有用的 tips of LeaderF.

what is <leader> in vim?

:LeaderfBuffer or <leader>b

:LeaderfFile or <leader>f

特别是 可以使用 leaderf 的 ctags 功能

命令

在命令模式下执行,例如:

 :ECYDiagnosisLists
cmd params description
ECYDiagnosisLists - 用leaderf显示诊断内容.
ECYToggleDiagnosis - 开关诊断功能.
ECYSymbols - 用leaderf显示symbols.
ECYGoTo 1 跳转到某处, 例如 :ECYGoTo reference.
ECYInstall 1 安装引擎,例如: :ECYInstall html_lsp.
ECYListEngine 1 显示引擎状态.

定制

怎么修改?

全部的可定制内容,都有相应的变量,所以你只需修改变量,例如:把代码 let g:ECY_expand_snippets_key = '<F7>' 放进你的 vimrc.

按键

例如:

  let g:ECY_show_switching_source_popup = '<C-g>'let g:ECY_show_switching_source_popup = "<C-g>"let g:ECY_show_switching_source_popup = "\<C-g>"   ×

  let g:ECY_show_switching_source_popup = "\<C-g\>"  ×


  let g:ECY_select_items = ['<C-j>', '<C-k>']         √

  let g:ECY_select_items = [<C-j>, <C-k>]             ×
variable name default values description
g:ECY_show_switching_source_popup <Tab> String, Normal mode. 显示引擎选择面板.
g:ECY_expand_snippets_key <CR> a.k.a <Enter> String. 展开一个snippet,只能在补全窗口显示的时候才能使用.
g:ECY_select_items ['<Tab>','<S-TAB>'] String, Insert mode. 必须是一个包含两个item的列表,第一个item是向下滚动,第二个选项是向上滚动.
g:ECY_rolling_key_of_floating_windows ['<C-h>', '<C-l>'] String, Normal mode. 当有预览窗口的时候才可以使用,也是必须包含两个item的列表,第一个选项是向下滚动,第二个选项是向上滚动.
g:ECY_key_to_show_current_line_diagnosis H String, Normal mode. 显示当前行的 诊断内容.
g:ECY_key_to_show_next_diagnosis [j String, Normal mode. 显示下一个诊断的内容.
g:ECY_show_doc_key '<C-n>' String, Normal mode. 显示 当前文档.

杂项(并不是全部,请查看对应插件的文档)

例如:

  let g:ECY_python3_cmd = '/home/python38/python.exe'let g:ECY_python3_cmd = '/home/python38/python.exe --debug'   ×


  let g:ECY_preview_windows_size = [[30, 50], [2, 14]]     √

  let g:ECY_preview_windows_size = [30, 50, 2, 14]         ×


  let g:ECY_use_floating_windows_to_be_popup_windows = v:falselet g:ECY_use_floating_windows_to_be_popup_windows = v:truelet g:ECY_use_floating_windows_to_be_popup_windows = false      ×

  let g:ECY_use_floating_windows_to_be_popup_windows = 'v:false'  ×


  let g:ECY_disable_for_files_larger_than_kb = 200let g:ECY_disable_for_files_larger_than_kb = -1      ×

  let g:ECY_disable_for_files_larger_than_kb = 0       ×

variable name default values description
g:ECY_python3_cmd 'python' String. 如何运行 python.
g:ycm_autoclose_preview_window_after_completion v:true Boolean. 跟YCM一样,完成补全后,是否要关闭预览窗口.
g:ECY_disable_diagnosis v:false Boolean. 是否启动 代码诊断.
g:ECY_use_floating_windows_to_be_popup_windows v:true Boolean. 如果你的vim有floating windows 这个特性,但你又只想让ECY使用原始的补全方式.
g:ECY_triggering_length 1 Int. 当超过多少个字符时,ECY才显示补全提示.
g:ECY_disable_for_files_larger_than_kb 1000 Int. 跟 g:ycm_disable_for_files_larger_than_kb 一样. 当前buffer大小超过某个阈值就不启动ECY.
g:ECY_update_diagnosis_mode 2 Int. 更新诊断的频率,值为 2 时 意味着:只当在 normal mode 中才更新诊断,值为 1 时,在任何时候都更新诊断.
g:ECY_preview_windows_size [[30, 50], [2, 14]] Lists. 当你有floating windows 特性时,才能使用。 [[minwidth, maxwidth], [minheight, maxheight]]
g:ECY_file_path_ignore {'dir': ['.svn','.git','.hg'],'file': ['.sw?','~$','.bak','.exe','.o','.so','*.py[co]','~$','swp$']} Dict. 必须包含两个字段,‘dir’ 和 ‘file’。 过滤某些不需要显示的文件 的规则。

外观

例如:

  hi your_highlight1  guifg=#945596	guibg=#073642	ctermfg=red	ctermbg=darkBlue gui=bold
  let g:ECY_normal_matched_word  = 'your_highlight1'let g:ECY_normal_matched_word  = 'a_hightlight_does_not_exits'  ×
variable name default values description
g:ECY_highlight_normal_matched_word 'ECY_normal_matched_word' String. Only available when you have floating windows.
g:ECY_highlight_normal_items 'ECY_normal_items' String. Only available when you have floating windows.
g:ECY_highlight_selected_matched_word 'ECY_selected_matched_word' String. Only available when you have floating windows.
g:ECY_highlight_selected_item 'ECY_selected_item' String. Only available when you have floating windows.
g:ECY_diagnosis_erro 'ECY_diagnosis_erro' String. Color or Styles of diagnosis error.
g:ECY_diagnosis_warn 'ECY_diagnosis_warn' String. Color or Styles of diagnosis warning.
g:ECY_diagnosis_highlight 'ECY_diagnosis_highlight' String. Color or Styles of diagnostic underline hint.
g:ECY_erro_sign_highlight 'ECY_erro_sign_highlight' String. Color of error sign.
g:ECY_warn_sign_highlight 'ECY_warn_sign_highlight' String. Color of warning sign.

自己动手写引擎

去看看这个轻松易懂的例子吧。

你问我答

Q: 为什么ECY没有显示 Snippets 当我使用snippet引擎的时候?

A: ECY 依赖 Ultisnips,而 Ultisnips 也仅是一个引擎. 所以,你必须提供 Snippets 给 Ultisnips,你可以参考这些源:
honza/vim-snippets or CoreyMSchafer/code_snippets.

Q: 为什么一定要 LeaderF?

A: 有许多类似 LeaderF 的相同插件,例如: fzf-vim ctrlP. 我为什么只选择原因有三个: 1. 他们都依赖python. 2. 对我来说, 我只熟悉这些插件. 3. 支持各种相同的插件让ECY变得臃肿不堪.

模糊搜索优先.

一切操作都只需按最少的键盘 是ECY的原则之一.
重要: ECY不会再支持那些功能类似 LeaderF and ultisnips 的插件,除非地球爆炸了.

Q: 我仅需python的引擎,为什么ECY还是要把所有引擎对应的代码都放在我的电脑呢?

A:为了更好的开箱即用。例如说,YCM就像你所说的,每次要启用新的引擎都要重新编译一遍, 虽然YCM在编译C++,但同时也在下载对应引擎python的代码。相对ECY是python3脚本, 全部工程文件加起来都不足 5MB。现在一张图片的大小随随便便都可以超过ECY。

Q: 为什么不用Ale作为代码错误提示的工具呢?

A: Ale是依赖job的插件,使用时需要把buffer的内容通过job发送给linter,而且每次 用户操作的时候,ECY都会把buffer的内容发送到Server端,如果使用Ale的话 就要发送两次相同的buffer, 去做同一件事,这是极其低效率的。

Q: ECY 的默认按键总是和我习惯的按键冲突,有办法解决?

A: 为了更好的开箱即用,我们不得不占用一些按键, 所以某些插件之间的按键冲突是绝对会发生的。ECY为每个默认按键都预留了一个可修改的变量(详细的按键列表如上),修改这些变量即可改变默认映射。