Я использую 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 будет искать в каждом каталоге runtimepath имена подкаталогов, определенные в 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.
person
jdhao
schedule
28.03.2019
g:UltiSnipsSnippetDirectories
? я думаю, что это занимает - person SibiCoder   schedule 29.05.2016let g:UltiSnipsSnippetDirectories=[$HOME.'/.vim/UltiSnips']
. Однако это не рекомендуется при использовании сторонних подключаемых модулей в качестве фрагментов vim. После этого он вообще перестанет работать. - person Erick Chacon   schedule 29.05.2016A snippet directory must be a subdirectory of a directory defined in the 'runtimepath' option. The variable g:UltiSnipsSnippetDirectories defines a list of names used for snippet directories
. Итак, почему бы вам не попробовать добавить свой домашний путь в путь выполнения? Удалите значение, которое вы установили вg:UltiSnipsSnippetDirectories
ранее - person SibiCoder   schedule 29.05.2016:call UltiSnips#RefreshSnippets()
- person JESii   schedule 14.11.2018