3

我正在从 vim 执行 python 文件,如下所述: 如何执行我在 Vi(m) 中编辑的文件

我在 Windows 和 Linux 上观察到相同的行为。为了测试,我移动了我的 .vim 以避免其他插件干扰。然后我设置:

:set makeprg=python\ %

现在,当我运行这样的示例文件(称为 mini.py)

import datetime

print "hello"

def foo1():
    print "foo"
    print "str: " + str(datetime.datetime.now())
    print "str: " + str(datetime.datetime.now().date())

foo1()

现在当我执行

:make
"mini.py" 10L, 173C written
:!python mini.py  2>&1| tee /tmp/vew33jl/9
hello
foo
str: 2013-05-07 17:01:47.124149
str: 2013-05-07
"str: 2013-05-07 17" [New File]
(3 of 4): 47.124149

vim 会扼杀 datetime.now 输出,并使用当前日期创建一个新文件并立即显示它。

这种行为是可以预期的吗?

如果我注释掉 .now() 行(now().date() 显然不是问题),它会按预期工作,我或多或少会看到我期望的文本输出。

4

1 回答 1

2

当你使用 时'makeprg',Vim 会根据 解析输出以'errorformat'从输出中检索错误信息。您的日期输出看起来很像典型的错误消息,默认情况下:make会跳转到它遇到的第一个错误位置。

你可以做什么:

  • 使用:make!(有爆炸声);这将避免跳转到第一个错误。或者:
  • 除了设置'makeprg',还要清除'errorformat'以避免 Vim 解析输出;除非你只用 Vim 编辑 Python 文件;您应该使用:setlocal,而不是全局:set,并将其放入~/.vim/after/ftplugin/python.vim
:setlocal makeprg=python\ %
:setlocal errorformat=
于 2013-05-07T09:35:07.350 回答