我正在尝试使用flymake运行pyflakes,如建议here
这适用于本地文件,并且几乎可以对远程文件进行一些调整,但是我遇到了一个问题,即flymake / pyflakes'在运行时修改了缓冲区(尽管实际上似乎没有任何变化) ,这在实践中使它有点无用(例如,保存文件运行flymake,它会立即再次修改缓冲区)。
这就是我所做的几乎让它起作用的地方:
tramp-remote-process-environment
变量,以便可以在其路径中找到pyflakes (when (load "flymake" t) ...)
构造似乎没有像我预期的那样工作,但我并不太担心。flymake-start-syntax-check-process
函数,以便它使用start-file-process
(使用tramp)而不是{{ 1}}(但没有)。#4中的更改在处理本地文件时似乎不会导致任何问题,但是现在这使得flymake能够为远程文件运行远程pyflakes(错误会按预期突出显示),在这种情况下,缓冲区是每当flymake运行时都会'修改'。
我猜测start-process
对于远程进程会导致一些额外的返回值/数据不会发生在本地进程中。
有没有人有任何见解/建议?
答案 0 :(得分:9)
你需要在本地告诉flymake create它的缓冲区somewhere的副本,我更喜欢使用$TMP
目录,因为这个也允许我使用 tramp on目录中的文件我没有写入权限。
你可能想要查看我的flymake-python分叉,因为它完成了所有这些。
答案 1 :(得分:6)
我在Flymake(https://github.com/illusori/emacs-flymake)的分支中修复了这个问题。
它将通过Tramp在远程计算机上运行语法检查,而不会出现您看到的缓冲区修改问题;或者您可以将flymake-run-in-place
设置为nil
,它将在本地计算机上运行语法检查,就像常规非Tramp缓冲区上的flymake一样。
由于它已在Flymake级别修复,因此此修复适用于所有语言和语法检查,而不仅仅是pyflakes。
如果您对发生原因的详细信息感兴趣,基本上当启动文件进程的Tramp处理程序启动时,它会将连接的登录消息转储到当前缓冲区的末尾,然后任何输出过滤器都可以附在过程中。
通常这表现为人们看到/ etc / issue的内容出现在他们的文件末尾以及“你有邮件”。等等。
在您的情况下,登录消息可能是空的或只是换行符,因此您没有看到任何文本被添加,即使它将缓冲区设置为已修改。