Como depurar Vim Broken Completefunc em arquivos Haml?
-
18-09-2019 - |
Pergunta
estou a usar Rails.vim E eu amo como você pode usar Ctrl-x Ctrl-U no modo de inserção para nomes de métodos longos para preenchimento automático, como distance_of_time_in_words
e accepts_nested_attributes_for
. Mas, por algum motivo, não funciona em arquivos HAML e não consigo descobrir o que está errado ou como corrigi -lo.
:help i_CTRL-X_CTRL-U
diz que a conclusão automática está usando completefunc
. O arquivo haml diz é completefunc=syntaxcomplete#Complete
(e é o mesmo em arquivos ERB e auxiliar onde Ctrl-x Ctrl-U funciona bem.) Não consigo encontrar onde o syntaxcomplete#Complete
A magia é definida, mas presumivelmente tem algo a ver com a sintaxe do FileType. Meu .vim/syntax/haml.vim
vem de vim-haml, então tentei removê -lo, mas o problema persiste. Comentando meu inteiro .vimrc
também não ajudou. O que mais posso tentar?
ATUALIZAÇÃO: Eu pesquisei meus arquivos de configuração do VIM e o único lugar que parece estar fazendo qualquer coisa com syntaxcomplete#Complete
é em autoload/rails.vim
E parece assim:
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
Solução
As funções com # em nome são definidas em scripts de automóveis automáticos:
Uma função que pode ser carregada automaticamente tem um nome como este:
: Ligue para o nome do arquivo#funcname ()
Quando essa função é chamada, e ainda não está definida, o VIM pesquisará os diretórios "AUTOLOAD" em 'RuntimePath' por um arquivo de script chamado "filename.vim". Por exemplo, "~/.vim/AUTOLOAD/FILENAME.VIM".
Ver :help autoload
.
Outras dicas
Parece que o arquivo que você está procurando faz parte do vim:
$ find /usr/share/vim/ -iname "syntaxcomplete.vim"
/usr/share/vim/vim72/autoload/syntaxcomplete.vim
Há um página vim.org com a versão mais recente do script.
Se você deseja personalizar a conclusão, basta escrever sua própria função de conclusão. Ver :help complete-functions
Você também pode usar Ctrl+n Para usar a conclusão simples do VIM. Ele é concluído com o texto de qualquer um dos arquivos abertos, mas pode ser personalizado. (Ver :help 'complete'
)