Почему не работает список доступных фрагментов UltiSnips?

Я хотел бы перечислить доступные фрагменты, используя простое нажатие клавиши. Однако я не могу этого сделать. Вот мои настройки UltiSnips:

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"

let g:UltiSnipsListSnippets="<c-;>"

let g:UltiSnipsSnippetsDir="~/.vim/ultisnips"
let g:UltiSnipsEditSplit="vertical"

"Open UltiSnips edit function
nmap <leader>se :UltiSnipsEdit<cr>

У меня установлены vim-snippets и определено несколько моих собственных фрагментов.

Ничего не происходит, когда я нажимаю CTRL-;. Я пытался изменить отображение на различные нажатия клавиш, но ничего не происходит. Я думал, что какой-то другой плагин, который я использую, будет мешать выбранному нажатию клавиши, поэтому я менял его несколько раз, но до сих пор не получил список. Независимо от того, какие у меня настройки, я не вижу список фрагментов.

Какую магию я должен вызвать, чтобы увидеть список фрагментов?


person jlconlin    schedule 24.09.2019    source источник
comment
Вы не должны сопоставляться с C-;, так как Vim не может надежно распознать этот аккорд нажатия клавиши. Ознакомьтесь с часто задаваемыми вопросами о vimhelp, чтобы узнать список комбинаций символов, которые вы можете использовать.   -  person Das_Geek    schedule 25.09.2019
comment
Я пробовал несколько разных нажатий клавиш и не нашел ни одного работающего. Я буду продолжать пытаться!   -  person jlconlin    schedule 26.09.2019


Ответы (2)


У меня это тоже не работает!

Но копаясь в документации по Ultisnips, я нашел альтернативу: h UltiSnips#SnippetsInCurrentScope. В этом разделе справки есть пример функции GetAllSnippets(), которая возвращает list сниппетов, доступных для текущего буфера, и выглядит она так:

function! GetAllSnippets()
  call UltiSnips#SnippetsInCurrentScope(1)
  let list = []
  for [key, info] in items(g:current_ulti_dict_info)
    let parts = split(info.location, ':')
    call add(list, {
      \"key": key,
      \"path": parts[0],
      \"linenr": parts[1],
      \"description": info.description,
      \})
  endfor
  return list
endfunction

Я не уверен, каковы ваши требования после того, как список фрагментов доступен. Если вы хотите перейти к определению фрагмента, вы можете сделать это с помощью модифицированной версии функции в документе ниже. Это заполняет и открывает список быстрых исправлений:

function! GetAllSnippets()
  call UltiSnips#SnippetsInCurrentScope(1)
  let list = []
  for [key, info] in items(g:current_ulti_dict_info)
    let parts = split(info.location, ':')
    call add(list, {
      \"text": key,
      \"filename": parts[0],
      \"lnum": parts[1],
      \"context": info.description,
      \})
  endfor
  call setqflist([], ' ', { 'title': 'Snippets', 'items' : list})

  " Open Quickfix list as soon as it is populated
  copen
endfunction

В качестве альтернативы, если вы используете fzf-vim, вы можете использовать команду :Snippets для вывода списка, fuzzy найти и вызвать фрагмент.

РЕДАКТИРОВАТЬ:

Я сейчас выгляжу глупо! :D Решение было тут же в h g:UltiSnipsListSnippets:

Имейте в виду, что некоторые эмуляторы терминала не отправляют <c-tab> (и другие, например <c-h>) работающей программе.

Похоже, мой терминал тоже блокировал <C-tab> и <C-;>. Переназначил на использование <C-m>, но все равно не работает. Это потому, что это сопоставление режим вставки, а я все это время пытался в обычном режиме!

person Harish    schedule 25.09.2019
comment
Как и вы, я не понимал, что это сопоставление режим вставки. Теперь я чувствую себя <sheepish>. Спасибо, что помогли мне разобраться. - person jlconlin; 26.09.2019
comment
Спасибо за указание на это. Я использую Tilix и не знал, что ‹Ctrl-Tab› имеет привязку по умолчанию для выбора следующего окна терминала, которое конфликтует с этим. - person RTbecard; 17.11.2020

Я хочу немного упростить эти ответы. Для меня последнее предложение Хариша было ответом.

Это потому, что это сопоставление в режиме вставки, а я все это время пытался в обычном режиме!

Убедитесь, что вы находитесь в режиме вставки, когда пытаетесь перечислить фрагменты.

person bdempe    schedule 05.05.2021