Vim, Python, and Django autocompletion (pysmell?)

前端 未结 5 710
北海茫月
北海茫月 2020-12-04 07:08

Does anyone know how to set up auto completion to work nicely with python, django, and vim?

I\'ve been trying to use pysmell, but I can\'t seem to get it set up corr

相关标签:
5条回答
  • 2020-12-04 07:10

    I've had good luck with exuberant-ctags for this.

    I use this macro in my vimrc:

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

    You'll want to modify that slightly, so that it includes your python /site-packages/django/ directory as well as your own code.

    Then, hit F2 inside vim to update the tags, and use the regular vim tag bindings to navigate.

    0 讨论(0)
  • 2020-12-04 07:11

    First off, thank you for asking this question, as it forced me to figure this out myself and it's great!

    Here is the page I used as a reference: PySmell v0.6 released : orestis.gr

    1. Install PySmell using the setup.py install command.
    2. Generate the PYSMELLTAGS file for django by going to your site-packages/django directory and running: pysmell . -o ~/PYSMELLTAGS.django
    3. Copy that file to your project directory, and then ran pysmell . to generate the project PYSMELLTAGS file
    4. Make sure pysmell is in your PYTHONPATH (export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/)
    5. Run vim (vim .)
    6. Source pysmell.vim (:source /path/to/pysmell/pysmell.vim)
    7. Set the autocomplete command (:set omnifunc=pysmell#Complete)
    8. Type ^x^o to autocomplete and it should work

    I realize this is not a sustainable solution, but you should be able to use this as a start to getting it setup to always work (e.g., add the export to your .bashrc, add the :source to your .vimrc, setup autocmd FileType python set omnifunc=pysmell#Complete, etc.)

    Let me know if this is enough to get you started. It worked for me!

    Edit I simply added this to my .vimrc and as long as the PYSMELLTAGS & PYSMELLTAGS.django files are in my project root, it works fine without any other work:

    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
    
    0 讨论(0)
  • 2020-12-04 07:22


    (source: dispatched.ch)

    You can set up VIM with buffers, buffer display, auto complete, even Py Doc display.

    Here you go

    0 讨论(0)
  • 2020-12-04 07:26

    Today, you not need special extentions for django autocomplete in vim. Make sure that you have vim with python support. To check it, type in xterm:

    vim --version|grep python

    output:

    +python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs ... ...

    To make work autocomplete, add this lines in your .vimrc:

    autocmd FileType python set omnifunc=pythoncomplete#Complete

    if has("python")

    python import sys,os

    python sys.path.append('/home/sergey/workspace/django')

    python os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoProject.settings'

    endif

    where:

    • sys.path.append is path to your django workspace directory
    • djangoProject is name of your django project, which is going just after '/home/sergey/workspace/django'

    Finally, save it and restart vim. Now, after '.', you press default ctrl-x ctrl-o to get your autocomplete.

    0 讨论(0)
  • 2020-12-04 07:31

    As I wrote in other places, I developed Jedi. I really think it is far better than all the existing solutions (even PyCharm).

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

    It is built upon pythoncomplete and much much more powerful!

    It works for complex code:completion

    And has additional features: enter image description here

    There is a list of all possible features:

    • builtin functions/classes support
    • complex module / function / class structures
    • ignores syntax and indentation errors
    • multiple returns / yields
    • tuple assignments / array indexing / dictionary indexing
    • exceptions / with-statement
    • *args / **kwargs
    • decorators
    • descriptors -> property / staticmethod / classmethod
    • closures
    • generators (yield statement) / iterators
    • support for some magic methods: __call__, __iter__, __next__, __get__, __getitem__, __init__
    • support for list.append, set.add, list.extend, etc.
    • (nested) list comprehensions / ternary expressions
    • relative imports
    • getattr() / __getattr__ / __getattribute__
    • function annotations (py3k feature, are ignored right now, but being parsed. I don't know what to do with them.)
    • class decorators (py3k feature, are being ignored too, until I find a use case, that doesn't work with Jedi)
    • simple/usual sys.path modifications
    • isinstance checks for if/while/assert
    0 讨论(0)
提交回复
热议问题