使用flymake和emacs中的tramp远程运行pyflakes?

时间:2010-06-30 00:33:21

标签: python emacs tramp flymake pyflakes

我正在尝试使用flymake运行pyflakes,如建议here

这适用于本地文件,并且几乎可以对远程文件进行一些调整,但是我遇到了一个问题,即flymake / pyflakes'在运行时修改了缓冲区(尽管实际上似乎没有任何变化) ,这在实践中使它有点无用(例如,保存文件运行flymake,它会立即再次修改缓冲区)。

这就是我所做的几乎让它起作用的地方:

  1. 在遥控盒上安装了pyflakes。
  2. 自定义我的tramp-remote-process-environment变量,以便可以在其路径中找到pyflakes
  3. 使用了上面wiki链接中代码的变体。显然我排除了为远程缓冲区禁用它的检查。此外,(when (load "flymake" t) ...)构造似乎没有像我预期的那样工作,但我并不太担心。
  4. 重新定义(出于测试目的 - 建议应该没有问题,如果可以这样做)flymake-start-syntax-check-process函数,以便它使用start-file-process(使用tramp)而不是{{ 1}}(但没有)。
  5. #4中的更改在处理本地文件时似乎不会导致任何问题,但是现在这使得flymake能够为远程文件运行远程pyflakes(错误会按预期突出显示),在这种情况下,缓冲区是每当flymake运行时都会'修改'。

    我猜测start-process对于远程进程会导致一些额外的返回值/数据不会发生在本地进程中。

    有没有人有任何见解/建议?

    • Ubuntu上的Emacs 23.1和23.2
    • Python 2.4.6
    • Pyflakes 0.4.0(通过easy_install)

2 个答案:

答案 0 :(得分:9)

你需要在本地告诉flymake create它的缓冲区somewhere的副本,我更喜欢使用$TMP目录,因为这个也允许我使用 tramp on目录中的文件我没有写入权限。

你可能想要查看我的flymake-python分叉,因为它完成了所有这些。

答案 1 :(得分:6)

我在Flymake(https://github.com/illusori/emacs-flymake)的分支中修复了这个问题。

它将通过Tramp在远程计算机上运行语法检查,而不会出现您看到的缓冲区修改问题;或者您可以将flymake-run-in-place设置为nil,它将在本地计算机上运行语法检查,就像常规非Tramp缓冲区上的flymake一样。

由于它已在Flymake级别修复,因此此修复适用于所有语言和语法检查,而不仅仅是pyflakes。

如果您对发生原因的详细信息感兴趣,基本上当启动文件进程的Tramp处理程序启动时,它会将连接的登录消息转储到当前缓冲区的末尾,然后任何输出过滤器都可以附在过程中。

通常这表现为人们看到/ etc / issue的内容出现在他们的文件末尾以及“你有邮件”。等等。

在您的情况下,登录消息可能是空的或只是换行符,因此您没有看到任何文本被添加,即使它将缓冲区设置为已修改。