【问题标题】:vim: unable to autocomplete python package pathvim:无法自动完成 python 包路径
【发布时间】:2014-06-24 12:23:23
【问题描述】:

我将 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 包的子确认。但是,如果我将 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. 如果包不在直接目录中但存在于 PYTHONPATH 中,如何使用 vim 自动完成包?

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

我的~/.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

【问题讨论】:

  • 询问项目的 git-host 应该会给你更快/更好的解决方案......
  • 谢谢我这样做了。结果证明这是我的一个愚蠢的错误 - 在答案中添加它以突出显示它。

标签: python django vim autocomplete


【解决方案1】:

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

let g:jedi#completions_enabled=0

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

【讨论】:

    【解决方案2】:

    您不妨试试 YouCompleteMe (YCM):https://github.com/Valloric/YouCompleteMe

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

    clang_complete
    AutoComplPop
    Supertab
    neocomplcache
    

    我一直将它与 Django 和其他包(包括虚拟环境)一起使用。 它节省了大量的配置工作,而且开箱即用。

    【讨论】:

    • 谢谢普拉蒂什。之前曾尝试安装 YCM,但由于其 c/c++ 编译遇到了一些问题。将重试一次,因为它包含 supertab 和 necomplcache。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2011-10-22
    相关资源
    最近更新 更多