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

Python 在emacs中使用flymake和tramp远程运行pyflakes?,python,emacs,tramp,flymake,pyflakes,Python,Emacs,Tramp,Flymake,Pyflakes,我正在尝试使用flymake运行pyflakes,正如建议的那样 这适用于本地文件,几乎适用于远程文件,但我遇到了一个问题,即flymake/pyflakes在缓冲区运行时“修改”缓冲区(尽管实际上似乎没有任何变化),这使得它在实践中有点无用(例如,保存文件时运行flymake,它会立即再次修改缓冲区) 以下是我几乎让它工作的方法: 已在远程机箱上安装pyflakes 自定义mytramp远程进程环境变量,以便可以在其路径中找到pyflakes 使用了上面wiki链接中的代码变体。显然,我排除了

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

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

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

  • 已在远程机箱上安装pyflakes
  • 自定义my
    tramp远程进程环境
    变量,以便可以在其路径中找到pyflakes
  • 使用了上面wiki链接中的代码变体。显然,我排除了对远程缓冲区禁用它的检查。另外,
    (加载“flymake”t)
    构造似乎没有像我预期的那样工作,但我并不太担心这一点
  • 重新定义
    flymake start syntax check process
    函数(出于测试目的——如果可以工作,则建议可以),以便它使用
    start file process
    (适用于tramp),而不是
    start process
    (不适用)
  • #4中的更改在处理本地文件时似乎不会引起任何问题,但尽管这现在使flymake能够为远程文件运行远程Pyflake(错误按预期突出显示),但在这种情况下,每当flymake运行时,缓冲区都会被“修改”

    我猜想,对于远程进程,
    启动文件进程
    ,会产生一些本地进程没有的额外返回值/数据

    有人有什么见解/建议吗

    • Ubuntu上的Emacs 23.1和23.2
    • Python 2.4.6
    • Pyflakes 0.4.0(通过简易安装)

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


    您可能想签出我的fork of,因为它可以完成所有这一切。

    我在我的fork of Flymake()中修复了它

    它要么通过Tramp在远程机器上运行语法检查,而不存在您看到的缓冲区修改问题;或者,您可以将
    flymake就地运行
    设置为
    nil
    ,它将在本地计算机上运行语法检查,就像在常规非不定期缓冲区上运行flymake一样

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

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

    通常这表现为人们看到/etc/issue的内容与“youhavemail.”一起出现在他们的文件末尾,以此类推


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

    这听起来很有希望,但我不再方便地测试这一点。主销,你能告诉我是否有可以接受的解决方案吗?你好,@Ross Patterson。我用的是你修改过的flymake。对于没有.py扩展名的文件(但以python模式加载)有一个问题,我已经通过一些帮助解决了这个问题,并且它在本地python文件上非常有效。(带/不带py.扩展);()但是它不能通过ssh与tramp一起工作。本地缓冲区在minibuffer上显示flymake:0/2,而tramp buffer仅显示flymake。次要模式已打开,但没有突出显示。你知道吗?谢谢。谢谢你提供的信息。这看起来像是您所做的一系列出色的改进。请注意:2014年,您可以使用elpa安装的标准flymake(我有版本0.4.16)包括flymake run-in-place变量-simple customize this to nil,flymake将文件存储在$TMP中