vim:无法自动完成python包路径

时间:2014-05-07 13:30:00

标签: python django vim autocomplete

我正在使用vim - neocomplete,jedi-vim,supertab并尝试在键入以下行时执行自动完成:

from django.shortcuts import get_object_or_404

如果我在 django之后按Tab键。 - 我会得到一个包含

的下拉列表
        sys                  file [FI]
        VERSION                   [O]
        __doc__                   [O]
         __path__                  [O]
         __name__                  [O]
         __file__                  [O]
         __package__               [O]
         get_version(...,***)      [O]
         __builtins__()            [O]

而不是目录列表 - 包含django包的子ackages。如果我将django文件夹从/usr/local/lib/python2.7/dist-packages/django复制到我的本地目录。 按 django 后按Tab键

   bin.          dir  [FI]
   conf.         dir  [FI]
   contrib.      dir  [FI]
   core.         dir  [FI]
   .
   .

这可能是因为neocomplete从本地路径中选择它并显示目录列表。

但在任何情况下我都不能

from django.shortcuts import get_object_or_404

因为get_object_or_404是在django / shortcuts / __ init__.py中定义的,而jedi-vim似乎并不接受它。所以我的问题是:

  1. 如果包不在直接目录中,如何使用vim自动完成包 - 但是在PYTHONPATH中是否存在?

  2. 如何在自动完成中包含get_object_or_404等方法(为此我尝试在整个/usr/local/lib/python2.7/dist-packages/django目录中使用ctags,但这并不是为了在特定包中显示方法 - 它显示所有模糊匹配标记方法,这些方法在编码时会产生很多噪音?

  3. 我的〜/ .vimrc特定于supertab,neocomplete和jedi-vim如下:

    Bundle 'Shougo/neocomplete.vim'
    let g:neocomplcache_enable_at_startup = 1
    let g:acp_enableAtStartup = 0
    let g:neocomplete#enable_at_startup = 1
    let g:neocomplete#enable_smart_case = 1
    let g:neocomplete#sources#syntax#min_keyword_length = 3
    let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'
    let g:neocomplcache_enable_fuzzy_completion=0
    
    Bundle 'ervandew/supertab'
    set omnifunc=syntaxcomplete#Complete
    "au FileType python set omnifunc=pythoncomplete#Complete
    autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
    autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
    autocmd FileType css set omnifunc=csscomplete#CompleteCSS
    set completeopt=menu
    let g:SuperTabDefaultCompletionType="context"
    " to do text select via j/k
    inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
    inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))
    
    Bundle 'davidhalter/jedi-vim'
    let g:jedi#popup_select_first = 0
    let g:jedi#auto_vim_configuration = 1
    let g:jedi#use_tabs_not_buffers = 1
    let g:jedi#completions_enabled=0
    let g:jedi#goto_assignments_command = "<leader>g"
    let g:jedi#goto_definitions_command = "<leader>d"
    let g:jedi#documentation_command = "K"
    let g:jedi#usages_command = "<leader>n"
    let g:jedi#completions_command = "<C-Space>"
    let g:jedi#rename_command = "<leader>r"
    let g:jedi#show_call_signatures = "1"
    au FileType python setlocal completeopt-=preview
    

2 个答案:

答案 0 :(得分:1)

您可能想尝试YouCompleteMe(YCM):https://github.com/Valloric/YouCompleteMe

  

YCM废弃了以下Vim插件,因为它拥有所有的插件   功能加上额外的:

clang_complete
AutoComplPop
Supertab
neocomplcache

我一直在使用Django和其他软件包(包括虚拟产品)。 它节省了大量的配置工作,并且开箱即用。

答案 1 :(得分:0)

这是我的一个愚蠢的错误。我认为这个选项:

let g:jedi#completions_enabled=0

表示第一个选项不会自动完成。但关闭此标志会禁用自动完成 - 这是我误解的。保持值1 - 解决它。