在 Emacs 中同步文件

Posted

技术标签:

【中文标题】在 Emacs 中同步文件【英文标题】:Synchronizing files in Emacs 【发布时间】:2012-11-18 13:56:53 【问题描述】:

我是 Emacs 新手,对计算不太擅长。然而,几周前我发现了 Emacs,我对它的可能性感到非常惊讶。我期待将它用于 LaTeX 文档编辑、一些编程、创建我自己的 elisp 函数,当然还有使用 org-mode 创建计划和笔记。对我来说主要的不便是我在几个地方(我的笔记本电脑、家庭和工作计算机)使用 Emacs。在工作中,我未经授权安装软件。如果我在我的 .emacs 文件或待办事项列表中进行了一些更改,我需要将其同步到任何地方。我正在使用保管箱,但这有点烦人,因为在工作中我需要下载它来覆盖旧文件等等。我需要一些实用的建议来了解如何同步一些私人文件,在一个地方所做的更改可以快速加载到其他地方地点。

附:对不起我的英语不好:)

【问题讨论】:

我正在使用 Dropbox,但它有点烦人,因为在工作中我需要下载它来覆盖旧的等等 你能再解释一下只使用 Dropbox 有什么问题吗?如果您正确使用保管箱,它应该会自动同步您在家和工作中的文件夹。 我无法在工作中安装 dropbox,只能在线使用。 所以你的问题与 Emacs 几乎没有关系,真的。您要问的是如何在家庭和工作之间同步一些文件。您的限制——无法在工作中安装任何软件——排除了大多数标准解决方案,例如 Dropbox 或git。也许你应该向超级用户提问。 【参考方案1】:

Emacs 在设计上是可移植的。不依赖于任何平台特定的功能。

因此,理论上,您在此处描述的问题归结为纯粹的文件同步问题。如果我猜对了,真正的限制是贵公司施加的公司限制。

我认为 DropBox 使用起来很乏味,因为不允许您使用创建完整集成的应用程序,但您受限于 Web 界面...如果是这种情况,您可能会受到同样的限制对于所有其他选择。

在这些环境中,我建议的一个选择是安装 Emacs,或者至少将您的 .emacs 文件夹安装在 USB 记忆棒上(我喜欢微型 USB 记忆棒,它看起来像鼠标加密狗,几乎不引人注意)。

您将能够在任何地方使用 emacs,如果您担心备份,您始终可以在您正在使用的另一台机器上实施手动或自动备份解决方案,并且您拥有更多访问权限。

【讨论】:

我的办公室限制使用 U 盘。【参考方案2】:

您当然可以使用 Dropbox,但您可能还想查看SugarSync,因为它允许您与任何其他设备共享您计算机上的任何文件(也可以在他们的网站上在线访问)。

我的结构是这样的:

我有一个糖同步文件夹“school”,其中有我共享的 LaTeX 文件(和 pdf)和 R 文件。我做作业,在课堂上我通常从手机上阅读我的 pdf。一切都会自动同步。

对于我的 Emacs 文件,我使用 Dropbox:好处是在其他计算机上,您只需确保它在相同的文件夹中看起来完全一样。

您通常希望结构为:

.../Dropbox/Emacs/.emacs

在我的 .emacs 中,您定义所有加载路径和要求,例如:

 (let ((base "/Username/Dropbox/emacs/.emacs.d/"))
  (add-to-list 'load-path base)
  (dolist (f (directory-files base))
    (let ((name (concat base "/" f)))
      (when (and (file-directory-p name) 
                 (not (equal f ".."))
                 (not (equal f ".")))
        (add-to-list 'load-path name)))))

您还应该设置一个自定义文件:

(setq custom-file "/path-to-dropbox/.emacs.d/emacs-custom.el")
(load custom-file)

并将备份存储在文件夹中:

(setq backup-directory-alist '(("." . "/path-to-dropbox/.emacs.d/backups")))

我会建议这样的结构:

emacs-display.el    (any visual stuff)
macros.el
misc-functions.el
external-plugins.el  (file for loading external packages and adjusts settings)
keybindings.el  (all your keybbindings)

您还设置了加载个人文件的模式关联,例如 LaTeX:

(eval-after-load 'latex '(load "/path-to-dropbox/.emacs.d/personal-emacs-latex"))

在这里,您可以在使用 LaTeX 时进行所有自定义。

.../Dropbox/Emacs/.emacs.d

在此文件夹中存储的实际文件。当某些东西由于某种原因不起作用时,删除它变得非常容易。

【讨论】:

【参考方案3】:

就 org-mode 的任务和事件而言,一种选择是与 Toodledo 服务器同步 - 大多数流行的移动计算设备都有 Toodledo 应用程序。该库位于以下链接:

https://github.com/christopherjwhite/org-toodledo

我修改了org-toodledo 库,使其表现得更像Toodledo,在我的.emacs 文件中,我使用:

(setq org-todo-keywords '(
  (sequence
  "Active(a)"
  "Next Action(n)"
  "Canceled(c)"
  "Hold(h)"
  "Reference(r)"
  "Delegated(d)"
  "Waiting(w)"
  "Postponed(P)"
  "Someday(s)"
  "Planning(p)"
  "|"
  "None(N)") ))

(setq org-toodledo-status-to-org-map '(
    ("Active" . "Active")
    ("Next Action" . "Next Action")
    ("Reference" . "Reference")
    ("Delegated" . "Delegated")
    ("Waiting" . "Waiting")
    ("Someday" . "Someday")
    ("Planning" . "Planning")
    ("None" . "None")
    ("Hold" . "Hold")
    ("Postponed" . "Postponed")
    ("Canceled" . "Canceled") ))

此外,在 org-toodledo 库中提到 "DONE" 的任何地方,我都将其更改为 "None" -- 我将其用于已完成的任务/事件。

我还修改了代码的另一个区域,以便我可以像 Toodledo 一样拥有五 (5) 个优先级。

【讨论】:

以上是关于在 Emacs 中同步文件的主要内容,如果未能解决你的问题,请参考以下文章

.emacs 代码来识别操作系统?

如何通过指定包名列表自动安装Emacs包?

如何通过指定包名列表来自动安装 Emacs 包?

从linux中同步文件夹的软件

两台电脑间文件同步软件

github实现指定文件的同步