2010-06-30 45 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