如果解析当前时间,则在vim中执行当前python文件会创建新文件

时间:2013-05-07 09:13:43

标签: datetime vim

我正在从vim执行python文件,如下所述: How to execute file I'm editing in 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

在datetime.now输出上修改一些chokes并创建一个包含当前日期的新文件并立即显示它。

这种行为是期待的吗?

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

1 个答案:

答案 0 :(得分:1)

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

你能做什么:

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