在Emacssum.cpp
和中处理两个活动缓冲区时,template.cpp
我不小心关闭了我的笔记本电脑 ( Ubuntu 15.04 (Vivid Vervet)),但没有关闭 Emacs,也没有保存这两个文件。
当我重新启动笔记本电脑并通过 列出 Emacs 中的目录内容时C - x C - f /C++/
,我得到以下信息。
.#sum.cpp 之后的行是什么意思?
lrwxrwxrwx 1 anupam anupam 41 Aug 6 00:53 .#sum.cpp -> [email protected]:1438790786
我知道 Emacs 通过 # by 保存未保存的缓冲区autosave
,但是访问时#sum.cpp
为什么显示以下内容?
文件是指向不存在目标的符号链接?
自动保存的文件是
#sum.cpp#
. Emacs使用符号链接.#sum.cpp
来存储一些内部数据(似乎是用户名、主机名和一些时间戳)由于符号链接的目标只是一些短文本(如果您访问符号链接的内容,则解析为路径),符号链接有时用于存储少量数据。在那种情况下,目标很可能不是有效的文件路径,如果您尝试访问它,您会收到错误消息。
这是因为创建符号链接是一个原子操作:要么创建带有完整内容的符号链接,要么根本不创建。相反,创建一个常规文件并用内容填充它不是原子的,如果出现错误,您可能会得到一个空文件或只有部分内容。
符号链接 - 符号链接 - 是包含目标文件相对于符号链接位置的文本描述的文件。与硬链接相反,当您删除目标文件时,符号链接是空的。
符号链接实际上只是一段短文本,当您打开它时,内核中会发生特殊的“魔法”。程序可以把他们想要的任何文本放在那里。在创建符号链接时,该文本是否实际上是一个有效的路径名并不重要。目标的存在仅在您尝试打开符号链接时才重要。
Emacs 使用它的方式略有不同。它创建一个符号链接以指示文件已打开并且有未保存的更改。如果您启动另一个 emacs 实例,它会警告您上一个实例已经打开了文件。
为此使用符号链接而不是其他方法的原因是,如果文件位于 NFS 上,符号链接也可以工作。这也是为什么主机名出现在文本中的原因,这样 emacs 就会知道文件当前是在这台机器上还是在另一台机器上打开。
我想如果您尝试再次使用 emacs 编辑该文件,它会注意到该文件应该由当前计算机上的 emacs 实例打开,但该 emacs 实例不再存在,因此它一定已经死了。然后 emacs 可以安全地忽略符号链接并且不会给您警告。