【问题标题】:Vim and python: context-unaware autocompletion of language methodsVim 和 python:语言方法的上下文不感知自动完成
【发布时间】:2011-06-13 17:59:25
【问题描述】:

我正在编写一个小 Python 脚本来学习 VIM 基础知识(我是 VIM 的初学者)。 我已经将 VIM 配置为使用omnicompletion,并且确实如此。 例如,如果我写 str.然后按 ctr+x,ctr+o 它建议我所有的字符串方法。 但是在我的代码中我有这样的东西:

for line in inFile.readlines():
    something = line.rpartition(" ")[0]

我希望 VIM 在键入 line.rpart 后自动完​​成 rpartition 方法名称。我不希望它知道线对象类型,但我希望 VIM 提出一个基于 python 库熟人的上下文不感知完成列表。 例如,如果使用 eclipse 我尝试完成

anObject.rpart

它建议我使用 rpartition 方法,即使它与 anObject 无关!

是否有可能让它与 VIM 一起使用?
谢谢。

我的 .vimrc 文件:

set showcmd
set textwidth=80
set expandtab
set smarttab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set number
set autoindent
filetype indent on
filetype plugin on
autocmd BufRead,BufNewFile *.py syntax on
autocmd BufRead,BufNewFile *.py set ai
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,with,try,except,finally,def,class
set modeline
syntax on
" Closes the Omni-Completion tip window when a selection is
" made
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

【问题讨论】:

  • 使用for line in file.readlines() jsut 会立即将整个文件放入内存中,这是不必要的。

标签: python vim autocomplete omnicomplete


【解决方案1】:

说真的,使用Jedi

它确实比周围的所有其他自动完成功能要好得多。

愿原力与你同在!

【讨论】:

    【解决方案2】:

    你绝对应该看看PySmell,它可以很容易地为 Vim 安装。它基于给定项目的静态分析生成完成菜单。它还可以根据它为 Python 标准库或 Django Lib 等外部库生成的标签生成完成建议。

    我对 Vims Python 的全能实现很满意,但自从我改用 PySmell 后,我再也没有回头。

    【讨论】:

    • 感谢您的回复。如果我理解,pySmell 提供了omnicompletion 所提供的功能以及额外的功能?
    • 当然,但它仅适用于 Python。 Omnicompletion 适用于更多编程语言。您可以在同一个 Vim 实例中将 Pysmell 用于 Python,将 Omnicompletion 用于其他编程语言。
    • 再次感谢,还有一个问题:当代码更改时(例如,添加了新类),我猜你必须更新 PYSMELLTAGS 文件?
    • 据我所知,答案是肯定的。我建议您在 SO (stackoverflow.com/questions/978643/…) 和此链接 (sontek.net/topic/vim) 上查看此线程以获取更多信息。
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2015-03-15
    • 2014-06-24
    • 1970-01-01
    • 2017-06-10
    • 2017-01-26
    • 2016-06-04
    相关资源
    最近更新 更多