2010-06-30 47 views
16

我试图用flymake运行pyflakes,作为建议here用flymake和emacs中的流浪汉远程运行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,对于远程进程,导致一些额外的返回值/数据不会发生在本地进程。

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

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

请注意:在2014年,您可以使用elpa(我有0.4.16版本)安装的标准flymake包含flymake-run-in-place变量 - 简单地将其自定义为零,flymake会将文件存储在$ TMP中 – gromgull 2014-03-23 07:26:33

回答

8

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

你可能想结账我的叉子flymake-python,因为它完成了这一切。

+1

听起来很有希望,但我不再处于方便的位置来测试它。 Kingpin,请问我是否有解决方案可以接受? – phils 2011-08-28 01:32:06

+0

主打说是的 – prince 2011-08-28 18:53:03

+0

在这种情况下,非常感谢你们。 – phils 2011-08-30 02:15:30

6

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

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

由于它固定在Flymake级别,因此该修补程序适用于所有语言和语法检查,而不仅仅是pyflakes。

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

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

就你而言,它可能是登录消息为空或只是一个换行符,所以你没有看到任何文本被添加,即使它将缓冲区设置为被修改。

+0

感谢您的信息。这看起来像是你所做的一系列优秀的改进。 – phils 2011-10-24 12:39:23