【发布时间】: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 似乎没有接受它。所以我的问题是:
如果包不在直接目录中但存在于 PYTHONPATH 中,如何使用 vim 自动完成包?
如何在自动完成中包含 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