50 votes

Omnicompletion de Vim avec Python ne fonctionne tout simplement pas

J'ai cherché pendant une heure, sur un Débordement de Pile et d'ailleurs. Hélas! S'il vous plaît aider. Vim est omnicompletion juste ne fonctionne pas.

  1. J'ai Vim 7.2 compilé avec le support de Python.

  2. filetype plugin on est dans ma .vimrc.

  3. Lorsqu'un .py le fichier est ouvert, :echo &omnifunc tirages pythoncomplete#Complete.

  4. Je travaille avec un gros projet et j'ai un tags le fichier généré avec exhuberant-ctags. C'est dans Vim de l' ctags chemin. Je peux le tester en tapant ^] sur un symbole et je suis alors pris aux symboles de sa définition.

  5. Mise à jour 1: l'Ensemble de mon projet de code est en python-en-Vim du chemin. J'ai peut - :python import myproject avec succès.

Maintenant, n'importe où, j'ai essayer C-x C-o, tout ce que j'obtiens est:

-- Omni completion (^O^N^P) Pattern not found

Ce que je fais mal?

Mise à jour 2: Quand je tape C-x C-o C-n au niveau du module, Vim affiche un achèvement popup avec un peu de niveau module constantes provenant d'autres modules dans mon projet. Mais c'est uniquement des constantes (symboles majuscules) et la réalisation ne fonctionne toujours pas, d'ailleurs.

Mise à jour 3: j'ai trouvé que C-x C-o dans le haut du fichier commence une sorte de omnicompletion, et de l'achèvement pprint. affiche le menu et de référence rapide de tout dans l' pprint module. Cependant, aucun de mes propre module, les importations sont en cours d'achèvement.

Mise à jour 4, un an plus tard: j'ai donné et appris Emacs. J'ai été du côté obscur, la terre mystique de l'intrigue et des épices, et je le dis à toi que j'ai trouvé Le Moyen.

Mise à jour 5, deux ans plus tard: je suis retourné à Vim. Emacs est magnifique, mais même après 1,5 ans de Emacs, je suis encore plus vite à faire le travail dans Vim. J'ai arrêté d'écrire en Python pour l'instant, cependant, et ne peut pas tester le fonctionnement de ces suggestions de travail.

12voto

codeape Points 38576

Quel module contient le symbole que vous essayez de compléter? Est-ce dans le python stdlib? Ou est-ce un module tiers?

Assurez-vous que le module / package est dans PYTHONPATH.

Dans Vim, faites-vous:

 :python import sys
:python print sys.path
 

Pour ajouter le répertoire du module:

 :python sys.path.append("/path/to/directory/")
 

9voto

Kris Jenkins Points 2229

Sonne comme l'interlocuteur a depuis longtemps disparu du côté obscur*, mais pour ce que ça vaut, j'ai juste eu ce problème, et dans mon cas, la cause était qu'un module je l'aide a été invoqué Python 2.7, mais ma version de Vim a été compilé avec Python 2.5.

Pour diagnostiquer j'ai essayé d' :python import mymodule, qui a échoué avec une erreur sur l'importation d'un module dépendant. Ensuite, :python import dependentmodule qui a échoué à l'étape suivante de la chaîne. Et ainsi et ainsi de suite, jusqu'à l'échec de la tentative d'importation d'un module de système qui est nouveau depuis Python 2.7. Problème trouvé.

Pour le résoudre, j'ai juste fait sudo port install vim +python27. Mais c'est pour OSX. YMMV.

(* Je plaisante. Les utilisateurs d'Emacs sont nos amis. C'est le peuple de la programmation dans le bloc-notes que nous avons tous à faire des économies...)

9voto

gotgenes Points 8667

Depuis que vous avez été prudent et fait certain que votre code est accessible par le PYTHONPATH, par codeape de la suggestion, est-il une possibilité que vous êtes en cours d'exécution dans l' import bug pour Vim Python omni-complet? Ce bug existe toujours en tant que de Vim 7.2.245.

Essentiellement, si aucune instruction d'importation échoue dans le fichier dans lequel vous travaillez, indépendamment de savoir si il est enveloppé dans un Try-Except clause, il va complètement briser omni-achèvement. Il devrait être assez facile de le vérifier, car la plupart des importations se produire au début du fichier.

Si vous décidez que ce bug est la cause de vos soucis, vos options comprennent:

  • s'assurer que les modules que vous importez sont sur le chemin d'accès au système, et pas seulement les fichiers de projet
  • en commentant tout import états qui ne parviennent pas
  • la fixation du bug
  • à l'aide de ropevim que votre méthode d'achèvement
  • à l'aide d'un éditeur différent; Netbeans IDE a le support de Python, et la jVi plugin est plutôt bon si vous êtes un Vim addict comme moi (ne laissez pas les années 1990 look de la page d'accueil vous tromper)

2voto

Sardathrion Points 1690

Après avoir mis à jour vers Fedora 16 (mais compilant toujours vim à partir des sources), l’achèvement complet a cessé de fonctionner avec le même message que ci-dessus. Je l'ai "réparé" en reprochant les clés.

 inoremap <C-space> <C-x><C-o>
 

dans ~/.vimrc et maintenant cela fonctionne à nouveau.

2voto

fspeech Points 31

J'ai eu un problème similaire avec omni achèvement ne fonctionne pas. Dans mon cas, il s'est avéré que le minibufexpl.vim plugin a été interférant avec omni achèvement. Voici comment j'ai découvert:

Mot clé Normal la fin des travaux. Omni complet ne fonctionne pas pour toutes les langues, pas seulement en Python. omnifunc est correctement définie. Après je C-X C-O, rien ne se passe. Je fais ":py impression globals()" et il est clair que la pythoncomplete n'a pas été chargé. Je peux ":appel pythoncomplete#Complet(1, ")" et de voir qu'il se charge. Pour moi, cela exclut-il être un Vim question. Il semble que quelque chose interfère avec le mappage clavier ou autrement intercepter l'omni achèvement de la demande. Je commence donc à désactiver mes plugins un par un. Il s'avère que le coupable dans mon cas, c'est "minibufexpl". J'ai le Holgado version à partir de github.

Il semble que il ya de nombreuses questions ouvertes avec MBE en fonction de la problématique tracker sur github et il n'y a pas eu de progrès depuis le début de 2012. Je vais le désactiver pour l'instant donc je peux utiliser l'auto-complétion. En attendant je vais juste ajouter ce qui suit à mon vimrc pour conserver plusieurs modifié tampons ouverts en même temps et à l'utilisation d'une simple séquence de touches pour faire défiler les (MBE plus intelligemment sélectionnez la mémoire à cycle de travers, mais semble trop lourd pour un simple problème):

set hidden
noremap <C-TAB> :bnext<CR>
noremap <C-S-TAB> :bprev<CR>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: