在保存时自动运行python代码

时间:2013-10-05 23:22:46

标签: python vim save watch

有没有办法自动观看python脚本文件并在每次保存时在tmux / screen中执行?我主要在vim工作,每次我想评估它在新窗口中打开的代码,所以它有点打破了工作流程。我问这个是因为我也在Scala中工作并且sbt构建工具有非常简洁的选项来做到这一点(在保存时运行编译器/ REPL)

2 个答案:

答案 0 :(得分:2)

正如肖恩和肯特建议的那样,这样做的简单方法就是让vim驾驶它。

但是,如果你只是“大部分”在vim工作,那可能不合适。

唯一的另一种选择是编写使用平台的文件系统监视API的代码,或者,如果最坏的情况发生,则定期轮询文件,并在每次更新时运行它。然后只需在screentmux(可能在另一个vim窗口中使用screen)下运行该代码。

由于我不了解你的平台,我会写一个愚蠢的民意调查实现来展示这个想法 - 请记住,在现实生活中,使用像inotifywatch / {这样的工具你会好得多。 {1}} /等:

fswatch

现在,你可以这样做:

import os
import subprocess
import sys
import time

scripts = sys.argv[1:]
mtimes = {script: os.stat(script).st_mtime for script in scripts}
while True:
    for script in scripts:
        mtime = os.stat(script).st_mtime
        if mtime != mtimes[script]:
            subprocess.call([script], shell=True)
            mtimes[script] = mtime
    time.sleep(250)

答案 1 :(得分:1)

如果每次保存py文件都会自动执行,这会很烦人。因为您可以编辑py文件,只需py类。或纯配置的东西。无论如何,如果你想要这样,你可以尝试:

autocmd FileWritePost *.py exec '!python' shellescape(@%, 1)

vimrc中的内容是:

autocmd FileType python call AutoCmd_python()

fun! AutoCmd_python()
        "setlocal other options for python, then:
    nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>

endf

现在你可以手动<F9>来测试你当前的python文件。

相关问题