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