LINUX.ORG.RU

Vim, автодополнение

 ,


0

1

Приветствую. Имею nvim с дефолтным автодополнение (CTRL-P/N, без всяких плагинов). Хочется дополнять теги вводя вводя буквы с пропусками, например - helloworld можно дополнить введя hewor. Можно? Без всяких гигабайтных плагинов размером с самолёт.

★★

Последнее исправление: kvpfs (всего исправлений: 1)

https://github.com/nvim-telescope/telescope.nvim

https://github.com/hrsh7th/nvim-cmp

Идешь в вики проекта и выбираешь нужные источники. Никаких самолетов, это все скрипты на lua.

как все это настраивается - рекомендую пример от одного из разрабов neovim и telescope, https://github.com/nvim-lua/kickstart.nvim

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 2)
Ответ на: комментарий от Lrrr

спасибо. Вообще я надеюсь, что можно какую-нибудь опцию дать стандартному комплишн фреемворку. Раньше у меня тоже всякое плагеньё было для комплита, оно как раз дополняло нужным образом, но я снёс это все к чертям в пользу дефолтного.

kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от bread

Можно ещё юниксвейно накостылить через fzf.

Я уже было обрадовался, но словно холодный душ:

Error detected while processing function CompleteInf:
line   11:
E117: Unknown function: fzf#vim#complete

fzf плагин поставил (обычный бинарь тоже есть), команда :FZF в виме работает. Грепнул файлы плагина, функции fzf#vim#complete нет вовсе, видимо инструкция протухла.

Удивительно, почему данная настройка вызывает проблемы, неужели это никому не надо.

kvpfs ★★
() автор топика
Ответ на: комментарий от bread

Вообще должно быть как-то несложно докостылить через fzf#run торчащий из FZF плагина, надо только придумать как ему скормить список токенов, может парсить tag файл, хотя наверное есть способ запросить этот список токенов у вима, он ведь у него есть с его дефолтным автокомплитом. Только во всех этих вим скриптах я совсем первокурсница.

kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от kvpfs

Грепнул файлы плагина, функции fzf#vim#complete нет вовсе

Точно есть в autoload. Без этого плагин не работает. https://github.com/junegunn/fzf.vim установлен? А то с fzf идет из коробки свой плагин, в котором нет всех плюшек.

bread
()
Ответ на: комментарий от bread

Да сначала неправильно поставил (ставил без менеджера, и почему-то не все файлы были, хз, что-то намудрил). Второй раз поставил правильно, способ заработал, но есть одно но - в fuzzy поиск перекидываются не все токены, т.е. я открываю стандартный поиск, запускаю данный костыль, открывается окно для fuzzy поиска с около 1000 именами, я не нахожу там всех функций. Если изначально уменьшить количество вариантов (через частичный ввод имени токена), то после некоторого порогового значения данные функции появляются. В итоге - работает ненадёжно, к сожалению, положиться на такой инструмент нельзя.

Спасибо за вариант.

kvpfs ★★
() автор топика

Я тут вот чего подумываю. Не хочу лезть в этот комплишен ливер фреемворка, хочу сделать параллельную систему - в переменной tags находится список tags файлов, в первый раз нужно взять и в цикле пройти по файлам, выполнить $(awk …) и сохранить результат в какую-то vim переменную/массив/и т.д, чтобы потом отправлять это всё в fuzzy поиск и не парсить файлы заново.

Если кому не сложно, то будет к месту небольшой минимальный пример с сохранением в статическую переменную выхлопа X вызовов одной шелл команды.

kvpfs ★★
() автор топика
Ответ на: комментарий от kvpfs

открывается окно для fuzzy поиска с около 1000 именами, я не нахожу там всех функций

Возможно complete_info() выдает неполную инфу. Надо доки курить. На первый взгляд там всё выглядит правильно.

bread
()
Ответ на: комментарий от kvpfs

в переменной tags находится список tags файлов, в первый раз нужно взять и в цикле пройти по файлам, выполнить $(awk …) и сохранить результат в какую-то vim переменную/массив/и т.д

Неплохой план, но вот только вим и так всё это делает когда строит список дополнений по тегам. Осталось только эту инфу правильно выцепить.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от kvpfs

Выстрадал я желаемое

let g:fuzzy_list=[]
function! CompleteInf()
	if len(g:fuzzy_list) == 0
		let l=taglist(".\*")
		for item in l
			call add(g:fuzzy_list, item['name']. ' : ' .item['kind'])
		endfor 
	endif
	call fzf#vim#complete(fzf#wrap({ 'source': g:fuzzy_list, 'reducer': { lines -> split(lines[0], '\zs :')[0] }  }))
endfunction 

imap <C-f> <CMD>:call CompleteInf()<CR>

Установлен плагин. При первом запуске CompleteInf() формируется кэш с тегами, если проект большой и тегов много, то может занять несколько секунд, последующие запуски моментальны. Для перегенерации кэша нужно выполнить let fuzzy_list=[].

В целом очень доволен, один лишь момент - уметь бы автоматом узнавать о необходимости перегенерить кэш, хотя и мелочь, но было бы неплохо.

kvpfs ★★
() автор топика
Ответ на: комментарий от bread

Кстати, забыл уточнить по поводу неполноты - она огромна. Мне complete_info() выдавал 1К тегов, фактически их было более 30К. Т.е. complete_info() не годится, видимо vim теги не кэширует, строит список по ходу дела по мере прокрутки/дополнения и выдаёт то, что есть на данный момент.

kvpfs ★★
() автор топика