设置 Emacs TRAMP 来存储本地备份

问题描述 投票:0回答:5

我喜欢 emacs,但有些事情一直困扰着我。当我通过 trapmp 编辑文件时,我似乎无法让 emacs 存储文件的本地备份。

目前,当我编辑本地文件时,一组旧版本存储在 /tmp/myusername/emacs_backup 文件夹中。但是,当我通过 trapmp 进行 FTPing 时,旧版本不会存储在那里(我认为它正在尝试远程存储它们?)。

这是我的 .emacs 设置:

(defvar user-temporary-file-directory  
  (concat "/tmp/" user-login-name "/emacs_backup/"))  
(make-directory user-temporary-file-directory t)  
(setq make-backup-files t)  
(setq backup-by-copying t)  
(setq version-control t)  
(setq delete-old-versions t)  
(setq kept-new-versions 10)  
(setq backup-directory-alist `(("." . ,user-temporary-file-directory)))  
(setq tramp-backup-directory-alist backup-directory-alist)  
(setq tramp-auto-save-directory user-temporary-file-directory)  
(setq auto-save-list-file-prefix
      (concat user-temporary-file-directory ".auto-saves-"))  
(setq auto-save-file-name-transforms  
      `((".*" ,user-temporary-file-directory t)))

我不在乎 trapsu 编辑是否也存储在 tmp 文件夹中 - 我认为越多越好。非常感谢任何帮助!

linux emacs ftp backup tramp
5个回答
3
投票

tramp-backup-directory-alist
的文档说

(setq 临时备份目录列表备份目录列表)

为主机上的 TRAMP 文件提供与本地文件策略相同的备份策略。

我将其解释为备份远程计算机(“他们的主机”)上的临时文件。查看

tramp.el
中的实现,这也是默认实现(如果未设置
tramp-backup-directory-alist
,则设置
backup-directory-alist
)。

Tramp 假设远程文件的备份也应该始终是远程的,并在备份之前显式地预先添加方法/用户/主机位。如果您想更改行为,我认为您必须建议

tramp-handle-find-backup-file-name
调整文件名(因此它是有效的本地文件名)并与
backup-directory-alist
中的条目协调。

FWIW:从长远来看,将备份放在临时文件目录中并没有多大帮助。 “临时”有点违背了备份的目的。


2
投票

我还尝试在本地存储备份。我提交了 bug,因为我认为

tramp-backup-directory-alist
已损坏。在与 Michael Albinus 交谈后,我发现我误解了
tramp-backup-directory-alist
,这是一种存储远程文件的远程备份的方式,而我应该这样做:

(add-to-list 'backup-directory-alist
             (cons tramp-file-name-regexp "/my/local/backup/"))

1
投票

我能够找到一个解决方法(我尝试通过tramp-backup-directory-alist进行设置 - 但显然有一个tramp能够在本地保存远程缓冲区)。我没有使用内置备份,而是找到了名为 backup-each-save.el 的 elisp 脚本,由 Benjamin Rutt 编写。


1
投票

重新定义

trump-handle-find-backup-file-name
对我有用。它摆脱了想要在远程服务器上保存备份的行为。

(defun tramp-handle-find-backup-file-name (filename)
      "Like `find-backup-file-name' for Tramp files."
      (with-parsed-tramp-file-name filename nil
        (tramp-run-real-handler 'find-backup-file-name (list filename))))

0
投票

Tl;dr:我有以下设置,Tramp 将远程文件备份到我的本地目录。

(setq backup-directory-alist '(("." . "~/.emacs.d/tmp")))
(setq tramp-backup-directory-alist nil)

说明:

根据Tramp 2.6.1.5的实现,

(let ((backup-directory-alist
   (if tramp-backup-directory-alist
       (mapcar
    (lambda (x)
      (cons
       (car x)
       (if (and (stringp (cdr x))
           (file-name-absolute-p (cdr x))
           (not (tramp-tramp-file-p (cdr x))))
          (tramp-make-tramp-file-name v (cdr x))
         (cdr x))))
    tramp-backup-directory-alist)
     backup-directory-alist))
  result)
  ...
)

这里的逻辑是这样的

  • 如果设置了

    tramp-backup-directory-alist
    ,则tramp会尝试将tramp文件前缀(即host/user/...)附加到每个备份目录(如果该目录满足三个条件):

    1. 是一个字符串,
    2. 是绝对路径,并且
    3. 不是流浪者之路。
  • 否则,无需修改即可使用

    backup-directory-alist

© www.soinside.com 2019 - 2024. All rights reserved.