如何修复Vim中对象实例缺失的Python自动补全?

17 投票
3 回答
4514 浏览
提问于 2025-04-16 21:42

我在使用Vim的自动补全功能时发现了一个奇怪的情况。当我在模块级别创建对象时,Vim的自动补全功能可以正常工作,能够识别我创建的实例:

正常补全的截图

但是如果我在一个函数或类里面尝试同样的操作,自动补全就不再有效了:

不正常补全的截图

有没有人知道怎么解决这个问题,或者有没有办法让自动补全在非模块范围内的实例上也能工作?

3 个回答

0

扩展一下@BergmannF的回答。如果你不想让rope's completion自动选择第一个选项,只需在imap命令后面加上<C-P>(表示选择上一个选项 -> 这样就不会有选项被选中了)。

imap <C-Space> <C-R>=RopeCodeAssistInsertMode()<CR><C-P>
1

我需要使用以下代码才能让 ctrl+space 这个组合键正常工作

imap <Nul> <C-R>=RopeCodeAssistInsertMode()<CR>
14

虽然这个方法没有使用Vim的自动补全插件,但通过使用rope、ropemode和ropevim,我们还是可以在方法中实现自动补全:

自动补全截图

虽然这并不是我想要的完全效果,但它的工作效果还不错。

我这样设置的:我从这里安装了ropevim,并在我的.vimrc文件中添加了以下几行:

" Rope AutoComplete
let ropevim_vim_completion = 1
let ropevim_extended_complete = 1
let g:ropevim_autoimport_modules = ["os.*", "traceback", "django.*",  "xml.etree"]
imap <c-space> <C-R>=RopeCodeAssistInsertMode()<CR>

现在按下Ctrl+Space就可以打开rope的补全菜单了。

撰写回答