如何让Emacs在多个位置保存文件?

Mur*_*ali 6 emacs

是否有一种简单的方法可以让emacs在两个位置保存当前缓冲区?我可以在'after-save-hook'中以编程方式将当前文件复制到第二个位置,但为此编写lisp代码可能需要一些时间.

对于那些好奇我为什么要这样的人:我希望我对JSP的更改立即部署在tomcat的webapps/myapp目录中.

因此,每当我保存JSP文件时,我希望它保存在我当前版本控制的源位置以及部署Tomcat应用程序的目录中.

我不能使用符号链接,因为我使用的是Windows机器,目标位置是Linux框中通过Samba导出的目录.

Tre*_*son 7

这样的事情应该有效:

(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)))
Run Code Online (Sandbox Code Playgroud)

有关详细信息,local-write-file-hooks请参阅此答案.

显然,自定义在第一次调用时创建的文件名'write-file.


gav*_*inb 6

鉴于您要解决的问题是立即部署更改,我建议编写一个脚本(在您的情况下是批处理文件),rsync使用适当的选项进行调用.您可以在after-save-hook(可能是矫枉过正)中运行此操作,或者在您进行了一组要测试的更改时分配一个热键来为您运行它.就像是:

(global-set-key 'f11 (shell-command "c:/dev/deploy_to_test.bat"))
Run Code Online (Sandbox Code Playgroud)

脚本看起来像这样:

rsync -avz --del c:/dev/mywebapp z:/srv/tomcat/mywebapp
Run Code Online (Sandbox Code Playgroud)

这可能比在多个位置保存同一文件更好,因为它确保部署目录始终与源存储库中的内容匹配.