我正在使用带有 UltiSnips 的 Neovim 并 deoplete 作为我的完成引擎。以下设置在 Windows 10(nvim 版本 0.3.4)和 Linux(CentOS 7,nvim 版本 0.4.0)上进行了测试。
UltiSnips 的文档解释了如何搜索片段(请参阅 参考资料:h UltiSnips-how-snippets-are-loaded
)。但是仍然不清楚如何配置以便 UltiSnips 可以找到我们的自定义片段。
从 UltiSnips 的文档中:
UltiSnips 将按照定义的顺序在每个“运行时路径”目录中搜索 g:UltiSnipsSnippetDirectories 中定义的子目录名称。例如,如果您保留您的代码片段~/.vim/mycoolsnippets
并且您想使用其他插件附带的 UltiSnips 代码片段,请将以下内容添加到您的 vimrc 文件中。
让 g:UltiSnipsSnippetDirectories=["UltiSnips", "mycoolsnippets"]
上面的描述既信息丰富又令人困惑,因为它是为 Vim 用户编写的,而不是 Neovim 用户。结果,如果您按照上面的示例进行操作,您会发现自定义代码段无法用于自动完成。
在下文中,我将写出适用于 Neovim 的内容。
首先,打开 nvim 并使用命令:echo &runtimepath
。该命令将打印 Neovim 搜索的所有运行时路径。根据文档,您的自定义片段目录应放在这些运行时路径之一下。在我的 Windows 机器上,输出是这样的(为简洁起见,省略了完整的输出):
C:\Users\Administrator\AppData\Local\nvim,C:\Users\Administrator\AppData\Local\nvim\plugged\deoplete.nvim,C:\Users\Administrator\AppData\Local\nvim\plugged\deoplete-jedi ,C:\Users\Administrator\AppData\Local\nvim\plugged\neco-vim,.....
在我的 Linux 机器上,输出是这样的(省略了完整的输出):
/home/haojiedong/.config/nvim,/home/haojiedong/.local/share/nvim/plugged/deoplete.nvim/,/home/haojiedong/.local/share/nvim/plugged/deoplete-jedi/,/home /haojiedong/.local/share/nvim/plugged/jedi-vim/,.....
不同的运行时路径用逗号分隔。对于 Windows 和 Linux,配置自定义片段的步骤是相同的。因此,在接下来的部分中,我将只关注 Linux,因为它更受欢迎。
Linux 上的运行时路径之一是/home/haojiedong/.config/nvim
. 我们选择这个目录并创建一个名为my_snippets
. 然后我们在文件夹下创建一个名为markdown.snippets
的文件my_snippets
。将以下代码段添加到markdown.snippets
:
snippet kbd "Keyboard tag"
<kbd>${1:KEY}</kbd> $0
endsnippet
这将创建一个以kbd
降价文件类型命名的片段。
在第三步中,我们将以下设置添加到init.vim
:
" `my_snippets` is the directory we created before
let g:UltiSnipsSnippetDirectories=["UltiSnips", "my_snippets"]
现在,打开一个降价文件并开始输入kbd
,您应该能够看到kbd
自动完成项:
我使用的补全引擎是 deoplete US
,这意味着这个补全项目来自 UltiSnips。