Vim, Python et Django autocomplétion (pysmell?)

Quelqu'un sait-il comment configurer l'achèvement automatique pour fonctionner correctement avec Python, django et vim?

J'ai essayé d'utiliser pysmell, mais je n'arrive pas à le configurer correctement (ou peut-être que je ne sais pas comment cela fonctionne). En ce moment, je lance pysmell dans le répertoire django (j'utilise le tronc) et déplace les balises résultantes dans mon répertoire de projet, puis je lance également pysmell dans le répertoire du projet. Vim ne récupère pas les tags django, cependant, et ils ne sont pas complétés automatiquement.

Fait quelqu'un sait comment configurer l'achèvement automatique dans vim afin qu'il complète les longues fonctions django (comme get_object_or_404) ainsi que les classes/fonctions dans mon propre code? J'ai fouiné sur google mais je n'ai pas trouvé de bonnes ressources.

Merci.

47
demandé sur So8res 2009-06-11 03:35:16

5 réponses

Tout d'abord, merci de poser cette question, car cela m'a forcé à comprendre cela moi-même et c'est génial!

Voici la page que j'ai utilisée comme référence: pysmell V0. 6 publié : orestis.gr

  1. installez PySmell à l'aide de la commande setup.py install.
  2. générez le fichier PYSMELLTAGS pour django en allant dans votre répertoire site-packages/django et en exécutant: pysmell . -o ~/PYSMELLTAGS.django
  3. Copiez ce fichier dans le répertoire de votre projet, puis exécutez pysmell . pour générer les PYSMELLTAGS du projet fichier
  4. assurez-vous que pysmell est dans votre PYTHONPATH (export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/)
  5. exécuter vim (vim .)
  6. Source pysmell.vim (:source /path/to/pysmell/pysmell.vim)
  7. définit la commande de saisie semi-automatique(:set omnifunc=pysmell#Complete)
  8. tapez ^x^o pour la saisie semi-automatique et cela devrait fonctionner

Je me rends compte que ce n'est pas une solution durable, mais vous devriez pouvoir l'utiliser comme un début pour le configurer pour toujours fonctionner (par exemple, ajouter l'exportation à votre .bashrc, ajouter le: source à votre .vimrc, le programme d'installation autocmd FileType python set omnifunc=pysmell#Complete, etc.)

Faites-moi savoir si cela est suffisant pour vous aider à démarrer. Il a travaillé pour moi!

Modifier J'ai simplement ajouté ça à mes .vimrc et aussi longtemps que le PYSMELLTAGS & PYSMELLTAGS.django les fichiers sont à la racine de mon projet, cela fonctionne bien sans autre travail:

python << EOF
import os
import sys
import vim
sys.path.append("/usr/local/python/lib/python2.5/site-packages")
EOF
exe ":source ~/src/pysmell/pysmell.vim"
autocmd FileType python set omnifunc=pysmell#Complete
30
répondu bchang 2009-06-11 00:51:07

Comme je l'ai écrit ailleurs, j'ai développé des Jedi. Je pense vraiment que c'est beaucoup mieux que toutes les solutions existantes (même PyCharm).

Https://github.com/davidhalter/jedi-vim

Il est construit sur pythoncomplete et beaucoup plus puissant!

Cela fonctionne pour le code complexe: achèvement

Et a des fonctionnalités supplémentaires: entrez la description de l'image ici

Il y a une liste de toutes les fonctionnalités possibles:

  • prise en charge des fonctions/classes intégrées
  • complexe module / fonction / Classe structures
  • ignore les erreurs de syntaxe et d'indentation
  • rendements / rendements multiples
  • affectations de tuple / indexation de tableau / indexation de dictionnaire
  • exceptions / avec-déclaration
  • *args / **kwargs
  • décorateurs
  • descripteurs -> propriété / staticmethod / classmethod
  • fermetures
  • générateurs ( déclaration de rendement) / itérateurs
  • prise en charge de certaines méthodes magiques: __call__, __iter__, __next__, __get__, __getitem__, __init__
  • prise en charge de la liste.ajouter, ensemble.ajouter, à la liste.étendre, etc.
  • (imbriqué) liste compréhensions / expressions ternaires
  • importations relatives
  • getattr() / __getattr__ / __getattribute__
  • les annotations de fonction (fonction py3k, sont ignorées en ce moment, mais en cours d'analyse. Je ne sais pas quoi faire avec eux.)
  • décorateurs de classe (fonction py3k, sont également ignorés, jusqu'à ce que je trouve une utilisation cas, cela ne fonctionne pas avec les Jedi)
  • simple / habituel sys.path modifications
  • isinstance vérifie si/si/assert
13
répondu Dave Halter 2012-10-14 19:00:53

Le texte d'Alt http://blog.dispatched.ch/wp-content/uploads/2009/05/vim-as-python-ide.png

Vous pouvez configurer VIM avec buffers, buffer display, Auto complete, même PY Doc display.

Ici, vous allez

12
répondu Lakshman Prasad 2009-06-11 04:43:30

J'ai eu de la chance avec exubérant-ctags pour cela.

J'utilise cette macro dans mon vimrc:

execute 'map  :!/usr/bin/exuberant-ctags -f '.&tags.' --recurse '.$_P4ROOT.' '

Vous voudrez le modifier légèrement, afin qu'il inclue votre répertoire python / site-packages / django / ainsi que votre propre code.

Ensuite, appuyez sur F2 dans vim pour mettre à jour les balises, et utilisez les liaisons de balises vim régulières pour naviguer.

3
répondu user26294 2009-06-11 00:26:40

Aujourd'hui, vous n'avez pas besoin d'extensions spéciales pour la saisie semi-automatique de django dans vim. Assurez-vous que vous avez Vim avec le support python. Pour le vérifier, tapez xterm:

Vim --version / grep python

Sortie:

+python -python3 +quickfix +reltime +droitele -ruby +scrollbind +signes ... ...

Pour faire fonctionner la saisie semi-automatique, ajoutez ces lignes dans votre .vimrc:

Autocmd FileType Python set omnifunc = pythoncomplete#Complete

Si a("python")

Python import sys, os

Python sys.chemin.append('/home/sergey/espace de travail/django')

Système D'exploitation Python.environ ['DJANGO_SETTINGS_MODULE'] = ' djangoProject.paramètres'

Finsi

Où:

  • sys.chemin.append est le chemin d'accès à votre répertoire de l'espace de travail django
  • djangoProject est le nom de votre projet django, qui va juste après '/ home / sergey/workspace / django '

Enfin, enregistrez-le et redémarrez vim. Maintenant, après avoir".', vous appuyez sur Ctrl-X Ctrl-o par défaut pour obtenir votre saisie semi-automatique.

2
répondu Sergey Vakulenko 2012-05-19 15:01:29