是否有一种简单的方法可以让emacs在两个位置保存当前缓冲区?我可以在'after-save-hook'中以编程方式将当前文件复制到第二个位置,但为此编写lisp代码可能需要一些时间.
对于那些好奇我为什么要这样的人:我希望我对JSP的更改立即部署在tomcat的webapps/myapp目录中.
因此,每当我保存JSP文件时,我希望它保存在我当前版本控制的源位置以及部署Tomcat应用程序的目录中.
我不能使用符号链接,因为我使用的是Windows机器,目标位置是Linux框中通过Samba导出的目录.
这样的事情应该有效:
(add-hook 'local-write-file-hooks 'my-save-hook) (defun my-save-hook () "write the file in two places" (let ((orig (buffer-file-name))) (write-file (concat "/some/other/path" (file-name-nondirectory orig)) nil) (write-file orig nil)))
有关详细信息,local-write-file-hooks
请参阅此答案.
显然,自定义在第一次调用时创建的文件名'write-file
.
鉴于您要解决的问题是立即部署更改,我建议编写一个脚本(在您的情况下是批处理文件),rsync
使用适当的选项进行调用.您可以在after-save-hook
(可能是矫枉过正)中运行此操作,或者在您进行了一组要测试的更改时分配一个热键来为您运行它.就像是:
(global-set-key 'f11 (shell-command "c:/dev/deploy_to_test.bat"))
脚本看起来像这样:
rsync -avz --del c:/dev/mywebapp z:/srv/tomcat/mywebapp
这可能比在多个位置保存同一文件更好,因为它确保部署目录始终与源存储库中的内容匹配.