目前我在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>
)进行扩展。
将let g:UltiSnipsSnippetDirectories=[$HOME.'/.vim/UltiSnips']
添加到.vimrc文件使其工作。
我是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定义用于查找片段的目录。不要将此变量与之前的变量混淆。
让我们说你有目录:
涉及两个变量:
不在.vimrc中定义这些变量g:UltiSnipsSnippetDirectories设置为UltiSnips(没有路径)。显然,仅列出最终目录的名称而不是完整路径就足够了。
let g:UltiSnipsSnippetsDir="~/.vim/snips"
let g:UltiSnipsSnippetDirectories=["snips", "UltiSnips"]
写于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的目录。
我正在使用带有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/mycoolsnippets
and中,则需要使用其他插件附带的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。