我在使用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有关。有没有人知道这是怎么回事?
问题出在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里面加载这个文件。
hek14
3
讲真,我一直在寻找emacs远程开发的途径。ssh-deploy还行,但只是实现了local和server之间的文件同步,环境并不是同步的(例如写py的补全等还是用的本地环境)。
之前听说lsp+tramp貌似是一个方案。但是总感觉lsp-python特别的卡,没做到vscode的lsp那么顺滑。
你除了Ssh deploy还有其他想法吗
之前一直是用tramp加lsp。不过远程lsp一直没启动成功,用着就没有在本地直接写起来方便了。开始还在想着完全使用远程的服务器资源来开发,后来发现,完全没那个必要。一是本地资源完全够,二是用起来很顺手。这样的话就没必要折腾什么远程开发了。之后完全转回到本地编写,远程运行的方式。所以,现在主要的考虑是怎么方便上传运行,怎么把结果方便地传回来,
其中,ssh-deploy只是拿来即时上传修改,功能还是太弱了,不能指望太多。此外,还有freefilesync一键批量上传或者批量下载,都通过freefilesync的batch job实现。freefilesync的同步功能效率还是挺高的。 之所以不选rsync之类的,是因为需要一个成熟的界面来处理同步冲突。之前其实试过dired-rsync,灵活性有限。虽然可以按需定制,终究不如freefilesync这种方案成熟,可靠性高,少折腾。而且,批量上传下载的情况比较少,不值得折腾。
你使用过dired-rsync这个包:GitHub - stsquad/dired-rsync: Support for rsync from Emacs dired buffers 是这里的包吗?这个在你电脑上可以正常工作吗?一直没折腾好这个包。在自己的Spacemacs中一直有问题。
应该是这个。最近没法用电脑,确认不了。在我的spacemacs上可以正常工作,只是log很乱。
这个插件,兄台最近还在使用。我今天配置了下,发现并不work,按照官方的教程也走了一遍,没有反应。可以分享下你的配置吗?
呃。我看了一下。没特别的配置啊。在init函数里就use-package,里面defer设为t。没了。
我也很久没用这个包了。不知道现在正常不。以前能用,效果不是很好。
借楼问一下解决方案,使用evil也会出现这个问题,这个issue提供了一个workaround。但我在解决完evil后发现spice-mode
与matlab-mode
也会出现一样的状况 ![:sweat_smile: :sweat_smile:](https://emacs-china.org/images/emoji/apple/sweat_smile.png?v=12)
workaround: 似乎加个 hook 就行了
我也遇到一样的问题, 请问 hook 具体来说是什么呢?
(advice-add #'turn-on-evil-mode :before
(lambda (&optional args)
(when (eq major-mode 'fundamental-mode)
(hack-local-variables))))
1 个赞
发现在启用 treesit 的情况下,.dir-locals.el 也不会应用。比如打开 python-ts-mode