在emacs里用flymake和tramp远程运行pyflakes?

2024-10-01 00:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这对于本地文件来说很好,并且几乎可以处理远程文件,但我有一个问题,即flymake/pyflakes在运行时“修改”缓冲区(尽管实际上似乎没有什么变化),这使得它在实践中有点无用(例如,保存一个文件运行flymake,它会立即再次修改缓冲区)。在

我做了些什么来让它工作起来:

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

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

我猜start-file-process对于远程进程,会产生一些本地进程不会出现的附加返回值/数据。在

有人有什么见解/建议吗?在

  • Ubuntu上的Emacs23.1和23.2
  • Python 2.4.6
  • Pyflakes 0.4.0(通过简易安装)

Tags: 文件远程hereenvironmentremote进程processstart
2条回答

我在我的Flymake(https://github.com/illusori/emacs-flymake)的叉子里修好了这个。在

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

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

如果您对发生这种情况的详细原因感兴趣,基本上是在start file进程的Tramp处理程序启动时,它会在将任何输出筛选器附加到进程之前将连接的登录消息转储到当前缓冲区的末尾。在

通常情况下,当人们看到/etc/issue的内容和“youhavemail.”等一起出现在他们文件的末尾。在

在您的例子中,可能是登录消息是空的,或者只是一个新行,所以您没有看到任何文本被添加,即使它将缓冲区设置为被修改。在

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

您可能想签出我的fork of flymake-python,因为它完成了所有这些。在

相关问题 更多 >