为什么UltiSnips不识别我自己的片段?

时间:2016-05-29 14:28:10

标签: vim neovim youcompleteme ultisnips

目前我在Vim中使用 YouCompleteMe ,然后我使用vundler安装了 UltiSnips vim-snippets UltiSnips YouCompleteMe 兼容且工作正常;但是,当我定义自己的片段时会出现问题,因为这些片段无法识别。

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

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

保存文件后,代码段不会显示在 YouCompleteMe 列表中,也不会使用:UltiSnipsExpandTrigger进行扩展(在我的情况下为<c-l>)。

5 个答案:

答案 0 :(得分:4)

let g:UltiSnipsSnippetDirectories=[$HOME.'/.vim/UltiSnips']添加到 .vimrc 文件会使其正常运行。

答案 1 :(得分:4)

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

为了给你一个简短实用的解决方案,我自己的代码片段是〜/ .vim / myUltiSnips,我将以下几行添加到我的.vimrc

react-native run-ios

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

NOTA BENE 我的配置适用于我,但是,我不使用vim-snippets

来自官方文档:

  

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

     

g:UltiSnipsSnippetsDir定义了目录私有片段定义文件的存储位置。

     

g:UltiSnipsSnippetDirectories定义了查找片段的目录。不要将此变量与之前的变量混淆。

答案 2 :(得分:3)

让我们说你有目录:

  • 〜/ .vim / snips:for your snippets
  • 〜/ .vim / bundle / vim-snippets / UltiSnips /:for the vim-snippets

涉及两个变量:

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

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

let g:UltiSnipsSnippetsDir="~/.vim/snips"
let g:UltiSnipsSnippetDirectories=["snips", "UltiSnips"]

答案 3 :(得分:1)

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

让g:UltiSnipsSnippetDirectories = ['〜/ .vim / UltiSnips','UltiSnips']

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

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

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

我已阅读文档,但在此处找不到此行为。顺便说一句,它对NVIM的作用相同,我使用的是〜/ .config / nvim / UltiSnips目录。

答案 4 :(得分:0)

我正在将Neovim与UltiSnips和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。