Как отладить сломанную vim completefunc в файлах haml?
-
18-09-2019 - |
Вопрос
Я использую рельсы.vim и мне нравится, как вы можете использовать ctrl-x ctrl-u в режиме вставки для автозаполнения длинных имен методов, таких как distance_of_time_in_words
и accepts_nested_attributes_for
.Но по какой-то причине это не работает в файлах haml, и я, похоже, не могу понять, что не так и как это исправить.
:help i_CTRL-X_CTRL-U
говорит, что автозаполнение использует completefunc
.В файле haml указано, что его completefunc=syntaxcomplete#Complete
(и это то же самое в erb и вспомогательных файлах, где ctrl-x ctrl-u работает нормально.) Я не могу найти, где syntaxcomplete#Complete
магия определена, но, предположительно, это как-то связано с синтаксисом filetype .Мой .vim/syntax/haml.vim
происходит от vim-хамл, поэтому я попытался удалить его, но проблема не устранена.Комментируя всю мою .vimrc
тоже не помогло.Что еще я могу попробовать?
Обновить:Я просмотрел свои конфигурационные файлы vim и единственное место, которое выглядит так, как будто оно что-то делает с syntaxcomplete#Complete
находится в autoload/rails.vim
и выглядит примерно так:
function! s:resetomnicomplete()
if exists("+completefunc") && &completefunc == 'syntaxcomplete#Complete'
if exists("g:loaded_syntax_completion")
" Ugly but necessary, until we have our own completion
unlet g:loaded_syntax_completion
silent! delfunction syntaxcomplete#Complete
endif
endif
endfunction
Решение
Функции с # в имени определяются в сценариях автоматической загрузки:
Функция, которая может быть загружена автоматически, имеет имя вот так:
:вызовите filename#funcname()
Когда такая функция вызывается, и она еще не определена, Vim будет искать в каталогах "автозагрузка" в 'runtimepath' файл сценария с именем "filename.vim".Например "~/.vim/автозагрузка/filename.vim".
Видишь :help autoload
.
Другие советы
Похоже, файл, который вы ищете, является частью vim:
$ find /usr/share/vim/ -iname "syntaxcomplete.vim"
/usr/share/vim/vim72/autoload/syntaxcomplete.vim
Там есть vim.org страница с последней версией скрипта.
Если вы хотите настроить завершение, вы можете просто написать свою собственную функцию завершения.Видишь :help complete-functions
Вы также можете использовать Ctrl+n чтобы использовать простое завершение vim.Он завершается текстом из любого открытого файла, но может быть настроен.(См. :help 'complete'
)