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

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()似乎没有问题),它会按照预期工作,并且我大致上可以看到我期望的文本输出。

1个回答

2
当您使用'makeprg'时,Vim会根据'errorformat'解析输出以从输出中检索错误消息。您的日期输出看起来非常像典型的错误消息,并且默认情况下,:make跳转到它遇到的第一个错误位置。
您可以做以下事情:
  • 使用:make!(加上bang); 这将避免跳转到第一个错误。或者:
  • 除了设置'makeprg'之外,还要清除'errorformat',以避免Vim解析输出;除非您只使用Vim编辑Python文件;您应该使用:setlocal,而不是全局:set,并将其放入~/.vim/after/ftplugin/python.vim
:setlocal makeprg=python\ %
:setlocal errorformat=

所以基本上我会设置: au FileType python setlocal makeprg=python\ % au FileType python setlocal errorformat=这是等价的,对吗? - Matthias Kauer
是的,那是等价的,但我的解决方案在许多这样的设置中更具可扩展性(但需要 :filetype plugin on)。 - Ingo Karkat

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