Hoe kan ik autocomplete aan Vim toevoegen voor niet-standaard Python-bibliotheken?

Ik heb bijvoorbeeld een Python-script met de Google App Engine SDK:

from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app

De module db heeft een submodule Key , dus ik probeer er autocomplete op te gebruiken:

db.KTab

Maar aan de onderkant van het Vim-venster krijg ik het volgende:

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

Hoe voeg ik het pad naar niet-standaard Python-bibliotheken toe zodat Vim-automatisch aanvullen ze kan vinden? En ook hun docstrings weergeven?

5

2 antwoord

U moet uw bibliotheekbestanden toevoegen aan uw tagsbestand. Bijvoorbeeld als u de Google App Engine via pip hebt geïnstalleerd in een virtuele omgeving in env /:

virtualenv --no-site-package env/
source env/bin/activate
pip install google_appengine

... dan zou je moeten uitvoeren:

ctags -R --python-kinds=-i -o tags env/

Als u google_appengine niet via pip hebt geïnstalleerd, moet u het pad naar uw python-bibliotheken vinden (hint: dit moet worden aangegeven door $ PYTHONPATH. En volgens this referentiepagina:" op Unix, dit is meestal:/usr/local/lib/python. ") en vervang env/op het pad dat je hebt gevonden.

Ten slotte moet uw .vimrc-bestand uw tagsbestand parsen. Bijvoorbeeld, in mijn .vimrc, heb ik:

set tags+=/path/to/my/tags
2
toegevoegd
Hoe zit het als ik pip niet heb gebruikt? Zeg, doe gewoon zoiets als wijzen naar het pad van de bibliotheek? Wat is de procedure daarvoor?
toegevoegd de auteur Kit, de bron
Beantwoord bewerkt om uw vraag te beantwoorden.
toegevoegd de auteur Régis B., de bron

I grabbed this from natw's vimrc (I think...maybe sontek), but it should do the trick, so long as your packages are findable by your current install of Python. This lets you use gf, but also sets up searching these files for autocompletion. Note the py < part, which starts a section interpreted in Python. This means you'd have to have the python interpreter installed in vim to use it.

function! LoadPythonPath() 
py <

Trouwens, ik hou er niet van om deze belasting automatisch te hebben, dus heb ik het ingesteld op een functie die intelligent laadt/ontlaadt wanneer ik het roep/eerst een Python-document invoert. En ik voeg een laat g: PythonPathLoaded = 1 toe aan de vorige functie.

function! GetPythonPath()
    if !exists("g:PythonPathLoaded")
        call LoadPythonPath()
        return
    elseif g:PythonPathLoaded
        return
    else
        call LoadPythonPath()
    endif
endfunction

En ik heb ook een uitlaadfunctie ... hoewel ik niet zeker weet of dit een enorm verschil maakt.

function! UnloadPythonPath()

py <

Ik hoop dat dit helpt! Plus, een toegevoegde bonus is dat dit je pakketten laadt ongeacht of je virtualenv gebruikt (omdat het, geloof ik, draait wat er op dit moment is ingesteld als 'python').

1
toegevoegd