我正在使用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似乎并不接受它。所以我的问题是:
如果包不在直接目录中,如何使用vim自动完成包 - 但是在PYTHONPATH中是否存在?
如何在自动完成中包含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
答案 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 - 解决它。