Emacs/疑难解答 - Arch Linux 中文维基

跳转到内容

# Emacs/疑难解答

来自 Arch Linux 中文维基
< Emacs

相关文章

- Emacs
- Emacs/运行
- Emacs/使用
- Emacs/提示与技巧
- Emacs/软件包
- 文本编辑器
- Vim

本文主要讲解了在使用 Emacs 的过程中可能遇到的问题及其解决方案。

## Emacs 启动失败，提示错误信息 'Undefined color: "WINDOW_FOREGROUND"'

您需要安装 mcpp包 软件包或 gcc包 软件包。xrdb 使用 C 预处理器 cpp 对 X 资源进行预处理。如果系统中未安装 C 预处理器，xrdb 会自动跳过运行 C 预处理器，并且符号 WINDOW_FOREGROUND 不会扩展为十六进制颜色代码。

## 使用 Gccemacs 时 Emacs systemd 服务无法启动

使用 Gccemacs（分支 `emacs-native-comp` 或 `pgtk-nativecomp`）并尝试为其启动 systemd 服务时，可能会记录一条提示未找到 `.eln` 文件的错误信息：

    $ journalctl --user -xb -g eln

    emacs[7507]: emacs: ../native-lisp/28.0.50-x86_64-pc-linux-gnu-fc9c33938bf279333039c28064d363e8/lisp-mode-410874a46ab8852855281f021ca61fe7-1738806322de892570d69dfc55b437c2.eln: cannot open shared object file: No such file or directory

作为一种解决方法，编辑 `emacs.service`中 [Service] 部分的 `WorkingDirectory` 行。

    emacs.service

    [Service]
    ...
    WorkingDirectory=/usr/lib/emacs/28.0.50/x86_64-pc-linux-gnu/
    ...

注意：必须在可能存在的 `Restart` 参数之前定义 `WorkingDirectory` 参数。

## 彩色输出问题

默认情况下，Emacs shell 会显示用于打印颜色的原始转义序列。换句话说，它会显示奇怪的符号来代替所需的彩色输出。

在 `~/.emacs` 中加入以下内容后，问题就迎刃而解了：

    (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

## 在 X 窗口中显示字符的问题

如果在 X 窗口中启动 emacs 时，主窗口中的所有字符都是带黑边的白框（即在尝试查看未安装正确字体的字符时看到的白框），则需要安装 xorg-fonts-75dpi包 和/或 xorg-fonts-100dpi包 并重启 X 窗口。

## 启动缓慢

提示：为了减少启动时间，用户可以考虑运行 Emacs #作为 Systemd 单元。

启动时间慢通常由以下两种情况之一造成。

要确定是哪种情况，请使用以下命令运行 Emacs：

    $ emacs -q

- 错误，尤其是在 `/etc/hosts` 中的错误，往往会导致 Emacs 启动时出现 5 秒以上的延迟。有关信息，请参阅网络配置指南中的"设置主机名"。
- 您可能需要监控从计算机发送的任何网络数据包（使用 Wireshark 等程序），查看是否有任何奇怪的行为。
- 查找原因的一个简单方法是注释掉（即在行前加上";"）`~/.emacs` 中的可疑部分（或 `~/.emacs.d/init.el` (或 `~/.emacs.d/init.el`）中的可疑部分，然后再次启动 Emacs 看看是否有任何变化。请注意，使用 “require” 和 “load” 可能会减慢启动速度，尤其是在使用较大的扩展时。原则上，只有在以下情况下才可使用它们：Emacs 启动后需要，或只为扩展提供“自动加载”功能。否则，请直接使用 “autoload” 函数。例如

      (require 'anything)

  你可以使用

      (autoload 'anything "anything" "Select anything" t)

## 无法打开加载文件： ...

导致此错误的最常见原因是 “load-path” 变量未包含扩展所在目录的路径。要解决这个问题，可在尝试加载扩展之前将适当的路径添加到要搜索的列表中：

     (add-to-list 'load-path "/path/to/directory/")

如果尝试使用扩展包，而 Emacs 的配置前缀又不是 `/usr`，则需要更新加载路径。在软件包提供的说明之前，将以下内容放入 `~/.emacs` 中：

     (add-to-list 'load-path "/usr/share/emacs/site-lisp")

如果手动编译 Emacs，请注意默认前缀为 `/usr/local`。

## 坏掉的变音符号键问题：“<dead-acute> is undefined”

本文或本章节的语言、语法或风格需要改进。参考：帮助:风格

原因：文风需要调整。（在Talk:Emacs/疑难解答讨论）

在谷歌上搜索这个错误，我们找到了这个链接：https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html ，解释了这个问题。使用变音符号键的正常方法无法达到预期效果。如果尝试对 “fiancé” 这样的单词使用变音符号，就会产生上述信息。

解决方法是在启动文件 `~/.emacs` 中加入下面一行：

      (require 'iso-transl)

不，这不是一个 bug，而是新 Emacs 版本的一项功能。通过阅读邮件列表中的相关信息，我们发现了它 [1]：

  因为需要选择 iso-transl 或 iso-acc，所以似乎什么都不会自动加载。这两种输入法似乎都提供了 C-x 8 或 Alt-<accent> 前缀，但你我现在做的只是按一个死键（^、´、`、~、¨）来输入变音符号，然后再按另一个键来“组成”变音符号。在此过程中没有使用 Alt 键！根据文档，它似乎适用于 8 位编码，因此在 UTF-8 中应该没什么用。这个错误出现时我就报告过，但这个错误似乎被归类为一个功能……也许这只是因为文件是自动加载的，虽然很没用。

## C-M-% 和其他一些绑定在 emacs nox 中不起作用

这是因为终端比 Xorg 更受局限。不过，某些终端可能比其他终端处理更多的绑定。两种解决方案：

- 要么使用图形版本，
- 要么将绑定更改为受支持的绑定。

示例：

    .emacs

    (global-set-key (kbd "C-M-y") 'query-replace-regexp)

## Emacs 挂起

由于 Emacs 的单线程特性，许多操作都会阻塞。这种情况可能有几种。例如，Emacs 可能正在等待你的输入（例如，你在一帧中打开了 minibuffer，却在另一帧中尝试工作）。或者，Emacs 正在运行的代码需要一段时间才能完成。又或者，你遇到了一个错误。有几种方法可以在不杀死 Emacs 进程的情况下解锁 Emacs。

- 试试按 `C-g`。根据 Emacs 的操作，您可能需要按多次。
- 尝试按 `ESC ESC ESC`。
- 在另一个终端运行 `killall -SIGUSR2 emacs`

## Emacs-nox 输出变得凌乱

在终端中工作时，颜色、缩进或任何与输出相关的内容都可能变得疯狂。这（很可能？）是因为 Emacs 在某一时刻发送了一个特殊字符，而该字符可能与当前终端冲突。 如果出现这种情况，你可以执行 `M-x redraw-display`，这将重绘终端显示。如果这个问题经常出现，你可能需要将命令绑定到某个按键上，例如：`M-x redraw-display`

    (global-set-key (kbd "<f7>") 'redraw-display)

在您的 `.emacs` 文件中。

图形化 Emacs 没有这个问题。

## 在 emacs 终端中显示奇怪的转义数字 (utf-8)

将这些值导出到 `.bashrc` 或 `.zshrc` 中：

    $ ~/.bashrc or ~/.zshrc

    export LANG\='en_US.UTF-8'
    export LC_ALL\="en_US.UTF-8"
    export TERM\=xterm-256color

这可能会导致错误，因为在 Linux 发行版中，正确值使用的是小写 utf（例如 `en_US.utf-8`。

要查看所有可用的本地语言，请使用 `locale -a`。

## 在 tmux 的 emacs 中，Shift + 方向键不起作用

在 tmux 配置中启用 xterm 键：

    ~/.tmux.conf

    setw -g xterm-keys on

因为这会破坏其他组合键，所以请在 emacs 配置中加入以下内容。

    ~/.emacs

    (defadvice terminal-init-screen
      ;; The advice is named `tmux', and is run before `terminal-init-screen' runs.
      (before tmux activate)
      ;; Docstring. This describes the advice and is made available inside emacs;
      ;; for example when doing C-h f terminal-init-screen RET
      "Apply xterm keymap, allowing use of keys passed through tmux."
      ;; This is the elisp code that is run before `terminal-init-screen'.
      (if (getenv "TMUX")
        (let ((map (copy-keymap xterm-function-map)))
        (set-keymap-parent map (keymap-parent input-decode-map))
    (set-keymap-parent input-decode-map map))))

详见 tmux FAQ。

## KDE 中不正确的窗口大小调整

KDE 用户可能会发现 Emacs 窗口不能正确调整大小，而是调整后的部分是透明的，鼠标点击会被发送到底层窗口。要纠正这种行为，请将 KDE 的 GTK3 主题改为 oxygen-gtk 以外的其他主题。例如，使用 gtk3包 附带的 Emacs 主题。

要强制 Emacs 在 KDE 中完全最大化，点击标题栏中的 Emacs 图标，然后选择 More Actions > Special Window Settings。然后在 Size & Position 选项卡中选择 Obey geometry restrictions，在下拉菜单中选择 Force，并从右侧的单选按钮中选择 No。

分类：​

- 使用“模板:风格”标记的页面或章节
- Emacs

Emacs/疑难解答
添加话题