.dir-locals.el只应用在dired和它自身?

spacemacs

#1

我在使用ssh-deploy插件时遇到一个问题。

ssh-deploy建议在.dir-locals.el里面设置本地根目录和远程根目录。我用的是emacs27,spacemacs develop分支,.dir-locals.el内容如下

((nil . ((ssh-deploy-root-remote . "/ssh:username@ip:~/experiment")
     (ssh-deploy-root-local . "~/experiment")
     (ssh-deploy-async . 1)
     (ssh-deploy-on-explicit-save . 1))))

除了.dir-locals.el和dired buffer之外,这四个变量都没有设置成功。类似问题我在论坛上看到过,也在spacemacs的issue里面看到过。都没有明确的解决方案。

经过测试,用emacs -q启动这四个变量可以设置成功。把文件改名为.sh或者.py,也可以设置成功。似乎和spacemacs集成的projectile有关。有没有人知道这是怎么回事?


#2

问题出在major-mode上面。与projectile无关。我是在matlab-mode上面遇到的上述问题,而spacemacs在matlab-mode上面没办法成功设置buffer-local变量。spacemacs在hack-local-variables-hook里面执行spacemacs//run-local-vars-mode-hook来为major-mode设置buffer-local变量。在matlab-mode下面,不知道为什么根本就不加载hack-local-variables-hook。这可能是matlab-mode的实现有些不标准

现在的解决方案是:写了个.dir-locals-matlab.el来添加buffer-local变量再在matlab-mode-hook里面加载这个文件。


#3

讲真,我一直在寻找emacs远程开发的途径。ssh-deploy还行,但只是实现了local和server之间的文件同步,环境并不是同步的(例如写py的补全等还是用的本地环境)。 之前听说lsp+tramp貌似是一个方案。但是总感觉lsp-python特别的卡,没做到vscode的lsp那么顺滑。 你除了Ssh deploy还有其他想法吗


#4

之前一直是用tramp加lsp。不过远程lsp一直没启动成功,用着就没有在本地直接写起来方便了。开始还在想着完全使用远程的服务器资源来开发,后来发现,完全没那个必要。一是本地资源完全够,二是用起来很顺手。这样的话就没必要折腾什么远程开发了。之后完全转回到本地编写,远程运行的方式。所以,现在主要的考虑是怎么方便上传运行,怎么把结果方便地传回来,

其中,ssh-deploy只是拿来即时上传修改,功能还是太弱了,不能指望太多。此外,还有freefilesync一键批量上传或者批量下载,都通过freefilesync的batch job实现。freefilesync的同步功能效率还是挺高的。 之所以不选rsync之类的,是因为需要一个成熟的界面来处理同步冲突。之前其实试过dired-rsync,灵活性有限。虽然可以按需定制,终究不如freefilesync这种方案成熟,可靠性高,少折腾。而且,批量上传下载的情况比较少,不值得折腾。