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

问题描述 投票:2回答:5

目前我在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>)进行扩展。

vim neovim youcompleteme ultisnips
5个回答
5
投票

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


4
投票

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

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

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

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

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

来自官方文档:

代码段定义文件存储在代码段目录中。代码段目录必须是“runtimepath”选项中定义的目录的子目录。

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

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


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"]

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的目录。


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将按照定义的顺序在每个'runtimepath'目录中搜索g:UltiSnipsSnippetDirectories中定义的子目录名称。例如,如果您将片段保存在~/.vim/mycoolsnippetsand中,则需要使用其他插件附带的UltiSnips片段,请将以下内容添加到vimrc文件中。

让g:UltiSnipsSnippetDirectories = [“UltiSnips”,“mycoolsnippets”]

上面的描述既有信息又令人困惑,因为它是为Vim用户而不是Neovim用户编写的。因此,如果您按照上面的示例,您会发现自定义代码段不可用于自动完成。

在下文中,我将编写适用于Neovim的内容。

首先,打开nvim并使用命令:echo &runtimepath。此命令将打印Neovim搜索的所有运行时路径。根据文档,您的自定义代码段目录应放在其中一个运行时路径下。在我的Windows机器上,输出就像(为简洁省略了完整输出):

C:\用户\管理\应用程序数据\本地\ nvim,C:\用户\管理\应用程序数据\本地\ nvim \插入\ deoplete.nvim,C:\用户\管理\应用程序数据\本地\ nvim \插入\ deoplete绝地,C:\用户\管理\应用程序数据\本地\ nvim \插入\尼哥-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

这将为markdown文件类型创建一个名为kbd的代码段。

在第三步中,我们将以下设置添加到init.vim

" `my_snippets` is the directory we created before
let g:UltiSnipsSnippetDirectories=["UltiSnips", "my_snippets"]

现在,打开markdown文件并开始输入kbd,您应该能够看到kbd自动完成项:

我使用的完成引擎是deoplete和US意味着这个完成项目来自UltiSnips。

© www.soinside.com 2019 - 2024. All rights reserved.