-
Notifications
You must be signed in to change notification settings - Fork 27
4. 使用方法(useage)
- 补全触发(trigger):默认情况下,匹配菜单会自动跟随输入字符弹出。并通过
Tab
来选择下一个匹配项,Shift-Tab
选择上一个匹配项。 - 选择匹配项(completion):弹出补全菜单时,可以通过上下方向键来选择,也可以通过
c-n
和c-p
来上下选择,也可以自定义选择键 - 定义跳转(define jumping):
Ctrl-]
跳转到定义处,Ctrl-t
跳回(和 tags 跳转快捷键一致)。 - 错误跳转(lint jumping):使用
Ctrl-N
/Shift-Ctrl-N
跳转到下一个/上一个错误提示位置。Ctrl-E
关闭匹配菜单。 - Lint提示(lint message):为了避免输入干扰,插件只在离开 Insert 模式时自动显示行尾的提醒,但在行前 sign 部分的提示符会始终显示。
- Hover提示(hover information):
Shift-K
展开更多信息(和默认的查看帮助的快捷键一致) - 重命名(rename):
:EasyCompleteRename
来打开重命名窗口,通常绑定rn
- 返回源位置(jump back):当跳转离开后返回原位置可以用
Ctrl-t
逐次返回,也可以用:BackToOriginalBuffer
一次性返回,通常绑定gb
- 跳转到引用(reference jumping):
:EasyCompleteReference
跳转到引用,通常绑定gr
- 关闭补全菜单(close pum):默认
Ctrl-E
关闭补全菜单,也可以绑定其他快捷键:<Plug>EasycompleteClosePum
- 代码片段(snippets):回车选中代码片段时,自动会展开片段,输入过程中可以通过
Tab
和Shift-Tab
来切换位置 - cmdline:
/
、?
、:
进入 cmdline 后自动给出匹配菜单。
设置pum_noselect = 1
来禁止默认选中第一项,默认为0
pum_noselect = 1
通过c-n
和c-p
或者上下键来选择匹配项时,不会自动把单词写入行内,按回车写入行内
设置pum_noselect=0
可以默认选中第一项:


插件默认提供了好用的 snippets 集合,无须另外安装,如果你有自己的 snippets,可以通过custom_snippet="..."
来添加。默认支持两类snippets:
- vscode 格式:根目录下必须要包含
package.json
- snipmate 格式:只需制定根目录即可,目录中包含类似
java.snippets
的代码片段文件。
custom_snippet = "path to your snippets root dir"
当配置了自定义的 snippets,插件默认的 snippets 将不会被加载。
对于特定语言,插件也做了函数参数的片段展开,这里需要依赖 luasnip 或者 ultisnips。

默认通过 ctrl-n
和 shift-ctrl-n
来跳转上一个和下一个 (jump to next and prev lint position)。

我比较讨厌满屏的诊断提示,所以这里只实现了光标停留位置的行尾诊断提示,而且只限制了当前行,如果空间太小显示不下,则显示在 cmdline 里补充显示完整信息。
gd
跳转到定义处

通常用ctrl-t
来返回原来的位置。
'rn' 执行重命名

进入函数参数位置时,会自动弹出函数参数的解释信息:

默认 Shift-k
查看 hover 信息。

输入相对目录时自动弹出匹配菜单

进入 cmdline 后自动弹出 cmdline 菜单

补全菜单已经能很好的兼容 colorscheme,但还是支持了样式的自定义。
开启 Nerd fonts(插件默认不开启 Nerd font,需要手动配置一下):
nerd_font = 1
定义 menu 缩写,menu 字段显示 lsp 的名称简写,比如[TS]
、[VIM]
等
menu_abbr = 1
定义menu_abbr = 0
则 menu 字段显示单词属性全称,比如function
、keywords
等
开启和关闭nerd_font 以及 menu_abbr的效果:
enable nerd_font | disable nerd_font |
---|---|
![]() |
![]() |
补全菜单的样式定义:
- EasyFuzzyMatch: 匹配字符高亮. 默认 link 到 "PmenuMatch"
- EasyPmenu: Pmenu 菜单样式. 默认 link 到 "Pmenu".
- EasyPmenuKind: PmenuKind 样式. 默认 link 到 "PmenuKind".
- EasyPmenuExtra: PmenuExtra 样式. 默认link到 "PmenuExtra".
- EasyFunction: Function 图标样式. 默认link到 "Conditional".
- EasySnippet: Snippet 图标样式. 默认link到 "Keyword".
- EasyTabNine: TabNine 图标样式. 默认link到 "Character".
- EasySnippets: 行内补全样式. 默认link到 "LineNr"
- EasyNormal: 默认图标样式,默认link到 Normal.
- EasyKeyword: 默认Keyword图标,默认link 到 "Define".
- EasyModule: 默认Module 图标. 默认link到"Function".
当 winborder
设置为 1
. Pmenu 匹配菜单的背景色会自动设置成和文档背景色一致。如果你不想被自动设置 pum 背景色,可以这样关掉: pum_pretty_style = 0
。
所以只要 PmenuMatch、Pmenu、PmenuKind、PmenuExtra、PmenuSbar、PmenuThumb、PmenuSel 等基础样式是完整的,菜单样式就是没问题的。
补全菜单 border 的样式和 FloatBorder
保持一致。border 线条样式默认 single
.
Kind 字段通过 kind_icons
配置:
kind_icons = {
buf = "b",
snip = "s",
dict = "d",
class = "c",
["function"] = "f"
--...
},
这里是支持的属性列表:
列1 | 列2 | 列3 | 列4 |
---|---|---|---|
buf | snip | dict | tabnine |
cmdline | class | constant | enum |
snippet | field | folder | interface |
text | variable | event | const |
let | operator | local | method |
color | constructor | enummember | file |
function | keyword | struct | typeparameter |
module | var | alias | parameter |
property |
LSP 返回的结果自带 menu 文案属性,如果menu_abbr=1
,则只显示 lsp 的名称,否则显示全称。不依赖 lsp 返回的内置插件的 menu 文案通过menu_skin
配置:
menu_skin = {
cmdline = {
kind = "c",
menu = "[cmd]"
},
buf = {
kind = "b",
menu = "[buffer]"
},
tabnine = {
kind = "t",
menu = "[tabnine]"
},
snip = {
kind = "s",
menu = "[snippet]"
},
dict = {
kind = "d",
menu = "[dict]"
}
支持的类型有:cmdline、buf、tabnine、snip、dict
通常情况下 Normal 背景色和 Pmenu 的背景色不一致,如果配置了 winborder = 1
,显示不协调,因此插件提供了pum_pretty_style = 1
来让浮窗底色和编辑器背景色一致:
pum_pretty_style = 1
配置前后的效果:
pum_pretty_style = 0 |
pum_pretty_style = 1 |
---|---|
![]() |
![]() |
用过一些光标停留高亮的插件,主要是已有高亮的搜索词的情况下不好用。因为这个需求太常用了,所以我简单实现了这个功能,当开启cursor_word_hl=1
时,就可以让光标处的单词加上下划线。这里特别过滤了搜索高亮的情况,避免不必要的闪烁。cursor_word_hl 默认是关闭的,需要手动开启:
cursor_word_hl = 1
开启后的效果:

vim-easycomplete 兼容了两个 snippet 插件 LuaSnip 和 ultisnips:
- L3MON4D3/LuaSnip:只支持 nvim,速度快,支持多种 snippets 格式 snipmate 和 vscode 格式基于目录载入,lua 格式的源手动代码载入
- SirVer/ultisnips:支持 vim/nvim,依赖 python3,主要支持 snipmate。
snippets 源:vim-easycomplete 自带了常用的 snipmate 格式的源,默认即可加载。其他自定义的 snippets 源需要通过custom_snippet="..."
给定路径来配置,一旦设置了自定义的源,插件原有的代码片段库将不会被加载。
通过全局配置来关闭特定的补全源:
-
tabnine_enable=0
:关闭 tabnine 源 -
path_enable=0
:关闭 path 源 -
snips_enable=0
:关闭 snippet 源 -
cmdline = 0
: 关闭 cmdline 源
执行命令::EasyCompleteCheck
