我正在从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()显然不是问题),它按预期工作,我或多或少看到我期望的文本输出。
答案 0 :(得分:1)
当您使用'makeprg'
时,Vim会根据'errorformat'
解析输出,以从输出中检索错误消息。您的日期输出看起来像一个典型的错误消息,默认情况下,:make
会跳转到它遇到的第一个错误位置。
你能做什么:
:make!
(带爆炸);这将避免跳转到第一个错误。或者:'makeprg'
之外,还要清除'errorformat'
以避免Vim解析输出;除非你只是用Vim编辑Python文件;您应该使用:setlocal
,而不是全局:set
,并将其放入~/.vim/after/ftplugin/python.vim
::setlocal makeprg=python\ %
:setlocal errorformat=