如果使用Spacemacs和它的go layer,用内置 Tramp
通过 SSH
方法登录到远程服务器编辑Go文件,每次保存时都会调用 gofmt
并打开新窗口显示
从官网的配置说明中加入了以下尝试,都没有效果:
(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)