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

phi*_*ils 17 python emacs tramp flymake pyflakes

我正在尝试使用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)

Ros*_*son 9

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

你可能想要检查我的flymake-python的分支,因为它完成了所有这些.


Sam*_*ham 6

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

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

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

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

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

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