2

目前我在 Vim 中使用YouCompleteMe,然后我用 vundler 安装了UltiSnipsvim-snippetsUltiSnipsYouCompleteMe兼容且工作正常;但是,当我定义自己的代码段时,问题就来了,因为这些代码无法识别。

我怀疑问题是在我使用该UltiSnipsEdit函数时出现的,因为它UltiSnips在我的主目录中而不是在文件夹中创建文件.vim夹。例如,当我使用 R 脚本并使用UltiSnipsEdit. 时,它会r.snippets/home/UltiSnips. 然后我定义了一个片段来测试:

snippet test "Testing snip for R." 
# snipp is working
endsnippet

保存文件后,该片段不会出现在YouCompleteMe的列表中,也不会以:UltiSnipsExpandTrigger(<c-l>在我的情况下) 展开。

4

5 回答 5

6

添加let g:UltiSnipsSnippetDirectories=[$HOME.'/.vim/UltiSnips'].vimrc文件使其工作。

于 2016-05-29T20:09:59.733 回答
5

我是新手 UltiSnipes 用户,我遇到了同样的问题。它记录在官方文档中(请参阅此处并搜索UltiSnips-snippet-search-path)。

为了给你一个简短而实用的解决方案,我自己的片段文件夹是 ~/.vim/myUltiSnips,我在我的 .vimrc 中添加了以下几行

let g:UltiSnipsSnippetsDir="~/.vim/myUltiSnips"
let g:UltiSnipsSnippetDirectories = ['myUltiSnips']

所以(在第一行)你用绝对路径声明你的片段目录,然后(在第二行)将它添加到 UltiSnips 搜索的目录中,但这次使用相对于 Vim 运行时路径的路径。

NOTA BENE我的配置对我有用,但是,我不使用vim-snippets

来自官方文档:

片段定义文件存储在片段目录中。片段目录必须是在 'runtimepath' 选项中定义的目录的子目录。

g:UltiSnipsSnippetsDir 定义私有代码片段定义文件存储的目录。

g:UltiSnipsSnippetDirectories 定义用于查找片段的目录。不要将此变量与前一个变量混淆。

于 2017-04-14T19:50:20.280 回答
3

假设你必须目录:

  • ~/.vim/snips : 用于你自己的片段
  • ~/.vim/bundle/vim-snippets/UltiSnips/ :用于vim-snippets

涉及两个变量:

  • g:UltiSnipsSnippetsDir :您自己的片段的目录
  • g:UltiSnipsSnippetDirectories :用于片段的目录列表

没有在你的 .vimrc 中定义这些变量 g:UltiSnipsSnippetDirectories 被设置为 UltiSnips (没有路径)。显然,仅列出最终目录的名称而不是完整路径就足够了。

let g:UltiSnipsSnippetsDir="~/.vim/snips"
let g:UltiSnipsSnippetDirectories=["snips", "UltiSnips"]
于 2016-08-21T19:31:53.923 回答
1

写于 2018 年 6 月,行为有点奇怪。首先,您必须将自定义片段的目录添加到 .vimrc,因此我在 ~/.vim/UltiSnips 中创建了一个目录,并将这一行添加到我的 .vimrc:

let g:UltiSnipsSnippetDirectories=['~/.vim/UltiSnips', 'UltiSnips']

但这仍然不起作用,因为 UltiSnips 坚持将任何内容保存到 ~/UltiSnips 的基本目录中,然后再也找不到它们了!!!因此,在为 python 文件创建片段后,我使用 vim 命令保存了片段文件:

:saveas ~/.vim/UltiSnips/python.snippets

这会将片段保存在正确的目录中,UltiSnips 可以找到该片段,然后它将任何片段保存到正确目录中文件类型的正确文件中(并在需要时找到它)。

我已阅读文档,但在那里找不到这种行为。顺便说一句,它对 NVIM 的工作方式相同,我使用了 ~/.config/nvim/UltiSnips 目录。

于 2018-07-10T15:29:53.873 回答
0

我正在使用带有 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自动完成项:

quicker_8e6e6e5f-adbf-491c-aeb6-5e6d66f2bf42.png

我使用的补全引擎是 deoplete US,这意味着这个补全项目来自 UltiSnips。

于 2019-03-28T14:51:19.307 回答