这是我在运行 CentOS 7 和 emacs 24.3.1 的服务器上的问题:
- 当我运行
sudo emacs <protected_file>
一个我没有写权限的文件时,emacs 不会读取我的 .emacs 文件,它也不会识别 .emacs.d/elpa/ 中定义的命令。 - 当我
sudo emacs -u myuserid <protected_file>
在该文件上运行时,emacs 读取我的 .emacs 文件但仍然不知道我的 elpa 包。 - 当我运行时
emacs <protected_file>
,它读取 .emacs 并知道 .emacs.d/elpa 包。(当然,文件是以只读模式打开的。) - 当我
sudo emacs <myfile>
在一个我有写权限的文件上运行时,emacs 不会读取我的 .emacs 文件,它也不会识别 .emacs.d/elpa/ 中定义的命令。 emacs <myfile>
按预期工作。
但是,在我从中复制我的主目录的服务器上,运行 CentOS 6 和 emacs 23.1.1,一切正常。sudo emacs <protected_file>
读取 .emacs 并识别 .emacs.d/elpa/ 中的命令。
我已经验证我的主目录中的文件和目录权限在两台服务器上是相同的。
由于操作系统级别和 emacs 级别都不同,因此它似乎可能是问题所在sudo
或emacs
问题所在(或系统人员配置新服务器的方式)。
关于这种奇怪的行为有什么想法吗?
更新:第 4 条中所述的原始帖子sudo emacs <myfile>
按预期工作。这不是真的,我已经在上面进行了修改。
这里的问题是,当通过 运行您的编辑器时
sudo
,它将使用 root 的环境而不是您自己的环境。您可以像为普通用户一样为 root 配置编辑器,但显然这不能很好地扩展到一个以上的人可以sudo
访问的系统。那么,最简单的解决方案就是不要在
sudo
. 只需复制原始文件,修改副本,然后将其复制回原始文件即可。在这里,只有复制操作可能需要提升权限。在许多系统上,您可以将此方法与这将在目标文件的临时副本上以标准权限运行
$SUDO_EDITOR
、$VISUAL
或$EDITOR
(按该顺序选中),并在编辑器退出后将更改提交到原始文件。如果您的编辑器设置为
emacsclient
而不是 justemacs
,并且您在服务器模式下打开了 emacs,则只需关闭缓冲区(而不是整个 emacs)即可提交更改。