17

我正在尝试使用 flymake 来运行 pyflakes,正如这里所建议的那样

这适用于本地文件,几乎适用于远程文件,但需要稍作调整,但我遇到了一个问题,即 flymake/pyflakes 在运行时“修改”缓冲区(尽管实际上似乎没有任何变化),它呈现在实践中它有点没用(例如保存文件运行flymake,它会立即再次修改缓冲区)。

这是我几乎让它工作的方法:

  1. 在远程盒子上安装了 pyflakes。
  2. 自定义我的tramp-remote-process-environment变量,以便可以在其 PATH 中找到 pyflakes
  3. 使用了上面 wiki 链接中的代码变体。显然,我排除了为远程缓冲区禁用它的检查。此外,该(when (load "flymake" t) ...)构造似乎没有像我预期的那样工作,但我并不太担心。
  4. 重新定义(出于测试目的——如果可以使其工作,建议应该没问题)该flymake-start-syntax-check-process函数,以便它使用start-file-process(与tramp一起使用)而不是start-process(不使用)。

在处理本地文件时,#4 中的更改似乎不会导致任何问题,但是尽管这现在使 flymake 能够为远程文件运行远程 pyflakes(错误按预期突出显示),但在这种情况下,缓冲区已被“修改”每当flymake运行时。

我猜想start-file-process,对于远程进程,会导致一些额外的返回值/数据,而这些返回值/数据不会出现在本地进程中。

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

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

2 回答 2

9

您需要告诉 flymake 在本地某处创建它的缓冲区副本,我更喜欢使用该目录,因为这允许我在我没有写入权限的目录中的文件上使用 tramp。$TMP

您可能想查看我的flymake-python分支,因为它完成了所有这些工作。

于 2011-08-27T22:10:49.930 回答
6

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

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

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

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

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

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

于 2011-10-24T10:40:37.277 回答