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/疑難解答
新增話題