--- title: "SpaceVim autocomplete 模块" description: "这一模块为 SpaceVim 提供了自动补全的框架,包括语法补全等多种补全来源,同时提供了代码块自动完成等特性。" lang: cn --- # [可用模块](../) >> autocomplete - [模块描述](#模块描述) - [启用模块](#启用模块) - [模块配置](#模块配置) - [快捷键设置](#快捷键设置) - [代码块的设置](#代码块的设置) - [快捷键](#快捷键) ## 模块描述 这一模块为 SpaceVim 提供了代码自动补全的框架,同时提供了代码块自动完成的特性。默认情况 下根据当前 Vim 所具备的特性,自动选择补全引擎: - [deoplete](https://github.com/Shougo/deoplete.nvim) - neovim/Vim 具备 `+python3` 特性,并且安装了 neovim 的 python-client - [neocomplete](https://github.com/Shougo/neocomplete.vim) - 需要 Vim 具备 `+lua` 特性 - [neocomplcache](https://github.com/Shougo/neocomplcache.vim) - 当都不具备以上特性时 - [YouCompleteMe](https://github.com/Valloric/YouCompleteMe) - 默认 Ycm 是不会自动启用的,可通过 SpaceVim 选项 `enable_ycm` 来启用 代码块自动完成框架默认为[neosnippet](https://github.com/Shougo/neosnippet.vim),可通过 SpaceVim 选项 `snippet_engien` 设置为 ultisnips ## 启用模块 这一模块是默认启用的,当然为了稳妥,可以再配置文件里加入以下代码块: ```toml [[layers]] name = "autocomplete" ``` ## 模块配置 自动补全模块的配置,主要包括两个部分,自动补全快捷键的设置、代码块模板以及 使用体验的优化 ### 快捷键设置 为了提升用户体验,可以通过使用如下的模块选项来定制自动补全: 1. `auto-completion-return-key-behavior` 选项控制当按下 `Return`/`Enter` 键时的行为, 默认为 `complete`,可用的值包括如下 3 种: - `complete` 补全模式,插入当前选中的列表选项 - `smart` 智能模式,插入当前选中的列表选项,若当前选择的时 snippet,则自动展开代码块。 - `nil` 当设为 nil 时,则采用 Vim 默认的按键行为,插入新行 2. `auto-completion-tab-key-behavior` 选项控制当按下 `Tab` 键时的行为,默认为 `complete`,可用的值包括如下 4 种: - `smart` 智能模式,自动循环补全列表、展开代码块以及跳至下一个代码块的锚点 - `complete` 补全模式,插入当前选中的列表选项 - `cycle` 循环模式,自动再补全列表之间循环 - `nil` 当设为 nil 时,该行为和 `Tab` 的默认行为一致 3. `auto-completion-delay` 设置自动补全延迟时间,默认 50 毫秒 4. `auto-completion-complete-with-key-sequence` 设置一个手动补全的按键序列,输入模式下按下这一快捷键, 可以启动补全,设为 `nil` 时,这一特性将被禁用。 5. `auto-completion-complete-with-key-sequence-delay` 设置手动补全按键序列延迟时间,默认是 0.1 自动补全模块默认载入状态如下: ```toml [[layers]] name = "autocomplete" auto-completion-return-key-behavior = "nil" auto-completion-tab-key-behavior = "smart" auto-completion-delay = 200 auto-completion-complete-with-key-sequence = "nil" auto-completion-complete-with-key-sequence-delay = 0.1, ``` 通常会建议将 `auto-completion-complete-with-key-sequence` 的值设为 `jk`,如果你不用 这一组按键的话。 ### 代码块的设置 默认情况下,会自动载入以下代码块仓库和文件夹的代码块模板: - [Shougo/neosnippet-snippets](https://github.com/Shougo/neosnippet-snippets):neosnippet 的默认代码块模板 - [honza/vim-snippets](https://github.com/honza/vim-snippets):额外的代码块模板 - `~/.SpaceVim/snippets/`:SpaceVim 内置代码块模板 - `~/.SpaceVim.d/snippets/`:用户全局代码块模板 - `./.SpaceVim.d/snippets/`:当前项目本地代码块模板 同时,可以通过修改 bootstrap 方法来设置 `g` 的值,进而设置自定义的代码块模板路径,该值 可以是一个 string,表示单个目录,也可以是一个 list,每一个元素表示一个路径。 默认情况下,代码块模板缩写词会在补全列表里面显示,以提示当前输入的内容为一个代码块模板的缩写, 如果需要禁用这一特性,可以设置 `auto-completion-enable-snippets-in-popup` 为 false。 ```toml [[layers]] name = "autocomplete" auto-completion-enable-snippets-in-popup = false ``` ## 快捷键 **自动补全相关快捷键** | 按键 | 描述 | | ---------- | ------------------------------------------ | | `` | 选择下一个列表选项 | | `` | 选择上一个列表选项 | | `` | 依据 `auto-completion-tab-key-behavior` | | `` | 选择上一个列表选项 | | `` | 依据 `auto-completion-return-key-behavior` | **代码块模板相关快捷键** | 按键 | 描述 | | --------- | -------------------------------------------------- | | `M-/` | 如果光标前的词语为一代码块模板缩写,则展开该代码块 | | `SPC i s` | 列出所有可用的代码块模板,选择后并插入 |