操作远程Go文件保存时gofmt错误的问题

如果使用Spacemacs和它的go layer,用内置 Tramp 通过 SSH 方法登录到远程服务器编辑Go文件,每次保存时都会调用 gofmt 并打开新窗口显示

CptpS

从官网的配置说明中加入了以下尝试,都没有效果:

(setq gofmt-command "goimports")
;; or
(go :variables gofmt-command "goimports")

而编辑本地Go文件保存时却可以正常调用 gofmt ,功能正常。

在远程服务器确实没有安装Go运行时,有必要吗?感觉没有必要,编辑器是在本地。

错误信息表示在远程找不到 goimports


Tramp 有个坑爹的特(bu)性(g):

  • M-: (expand-file-name "~") 返回的是本地路径。
  • M-! echo $HOME 返回的是远程路径。

意味着,你的 el 代码当中,用 (executable-find "foo.exe") 得到了本地的绝对路径,最后执行的时候却跑到了远程 shell。所以,即使两端有安装 exe 文件,也可能执行失败,因为绝对路径不一样。

GO 也有个坑爹的特性,当源代码文件不在 GOPATH 路径下,相关的工具就会出问题。最常见的就是 gopls 没有补全。而 Tramp 就是把远程文件拷贝到 /temp 下编辑,正常人应该不会把这个路径当作 GOPATH。

这两个奇葩特性组合起来,一定加倍的酸爽。

2 个赞

朋友,你似乎说到问题的本质了,看

都无助,看来这是不可能完成的任务了。相当爽了。

(add-hook 'before-save-hook 'gofmt-before-save)