Comment déboguer cassé vim completefunc dans les fichiers HAML?
-
18-09-2019 - |
Question
J'utilise rails.vim et j'aime la façon dont vous pouvez utiliser ctrl-x ctrl-u en mode d'insertion de autoComplete longs noms de méthode comme distance_of_time_in_words
et accepts_nested_attributes_for
. Mais pour une raison quelconque, il ne fonctionne pas dans les fichiers de HAML et je ne peux pas à comprendre ce qui ne va pas ou comment y remédier.
:help i_CTRL-X_CTRL-U
dit que le autocomplétion utilise completefunc
. Le fichier haml dit son completefunc=syntaxcomplete#Complete
(et il est le même dans les fichiers erb et aide où ctrl-x ctrl-u fonctionne très bien.) Je ne peux pas trouver où la magie de syntaxcomplete#Complete
est défini, mais on peut supposer qu'il a quelque chose à voir avec la syntaxe de type de fichier. Mon .vim/syntax/haml.vim
vient de vim-haml , donc j'ai essayé de le retirer, mais le problème persiste.
Commentant toute ma .vimrc
n'a pas aidé non plus. Que puis-je essayer?
Mise à jour: Je cherchai mes fichiers de configuration vim et le seul endroit qui ressemble qu'il fait quoi que ce soit avec syntaxcomplete#Complete
est en autoload/rails.vim
et ressemble à ceci:
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
La solution
Fonctions avec # dans le nom sont définis dans les scripts autoload:
Une fonction qui peut être chargée automatiquement a un nom comme ceci:
: Appel nom de fichier # funcname ()
Lorsqu'une telle fonction est appelée, et il est pas encore défini, Vim cherchera la répertoires « autoload » dans « runtimepath » pour un fichier de script appelé "Filename.vim". Par exemple, "~ / .vim / autoload / filename.vim".
Voir :help autoload
.
Autres conseils
On dirait que le fichier que vous cherchez est une partie de vim:
$ find /usr/share/vim/ -iname "syntaxcomplete.vim"
/usr/share/vim/vim72/autoload/syntaxcomplete.vim
Il y a une page vim.org avec la dernière version du script.
Si vous voulez personnaliser l'achèvement, vous pouvez simplement écrire votre propre fonction d'achèvement. Voir :help complete-functions
Vous pouvez également utiliser Ctrl + n pour utiliser l'achèvement de simples vim. Il complète avec le texte de l'un des fichiers ouverts, mais peut être personnalisé. (Voir :help 'complete'
)