如何在Python解释器中启动Vim?

4

在 Ruby 中有一个叫做 interactive_editor 的 gem,它允许在 Ruby 解释器中输入 vi 时进入 vim 会话。

简单地说,我们需要在 ~/.irbrc 文件中要求引用 interactive_editor.rb,如下所示:

require '~/interactive_editor.rb'

我们已经完成了。当我们在交互会话中执行 vi 命令时,Vim 就会启动。一旦退出编辑器,Vim 会执行会话中的代码。这里有更多关于在 irb 中运行 Vim 的信息。

那么,在 Python 中有类似的功能吗?

2个回答

3

vim-ipython插件是IPython和Vim之间的双向集成。

引用来自https://github.com/ivanov/vim-ipython上的readme文件:

使用此插件,您可以将行或整个文件发送给IPython执行,并在Vim中获得对象内省和单词完成,就像在IPython中使用object?<enter>object.<tab>一样。

这是该插件的演示:http://pirsquared.org/vim-ipython/


Tab补全并不是我想要的,我只想使用纯Python解释器。 - Santosh Kumar
@SantoshKumar 你可以使用任何Python解释器与Ipython shell一起使用 - http://ipython.org/faq.html#can-ipython-run-under-ironpython-pypy-jython-other-python-interpreters,它比标准的Python shell更加可配置。 - siddharthlatest

2
from os import system as sh
def vim(fname): sh('vim ' + fname)

重新加载模块的可能方法:

import imp
from os import system as sh

def _vim(fname, globs):
    sh('vim ' + fname)
    (dirname, _, basename) = fname.rpartition('/')
    modname = basename.rpartition('.')[0]
    m = imp.load_source(modname, fname)
    globs[modname] = m

每次将此导入解释器时,建议手动创建一个包装器:

def vim(fname): _vim(fname, globals())

因为在Python文件中调用globals()函数会获取该文件的全局变量,而不是解释器的全局变量。我知道这并不优雅,但我建议手动重新加载模块,例如reload(modname),这样可以更加灵活控制,尽管可能有些繁琐。


代码在我退出vim后不会立即被解释。顺便说一下,这非常接近我想要的 :) - Santosh Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接