Emacs

来自 ArchWiki

Emacs 是一款可扩展、可自定义、自文档化的实时显示编辑器。Emacs 的核心是一个 Emacs Lisp 解释器,Emacs 的大多数内置功能和扩展都是用这种语言实现的。GNU Emacs 使用 GTK 作为其 X 工具包,但它在 CLI 环境中也能同样良好地运行。

安装

安装 以下软件包之一

如果您希望 Emacs 拼写检查工作,还要安装 aspell 和 aspell 语言,例如 aspell-en

可以搜索其他变体,例如 emacs-gitAUR 提供了 GNU Emacs 的开发分支。

用法

在启动 emacs 之前,您应该知道如何关闭它(尤其是在终端中运行时):使用 Ctrl+xCtrl+c 组合键。

要启动 Emacs,请运行

$ emacs

或者,从控制台使用它

$ emacs -nw

或者,为了快速加载(无 .emacs)并在 CLI 中编辑

$ emacs -Q -nw

如果您安装了 nox 版本,emacsemacs -nw 将是相同的。

也可以提供文件名以立即打开该文件

$ emacs filename.txt

无颜色

默认情况下,Emacs 启动时会使用颜色主题,以深蓝色显示超链接。要在文本终端上启动 Emacs 而不使用任何颜色主题或方案

$ emacs -nw --color=no

这将导致所有文本以终端的前景色显示——通常是黑色背景上的白色文本,或白色背景上的黑色文本。

作为守护进程

为了避免每次 Emacs 启动时都重新加载 Emacs 配置文件,您可以将 Emacs 作为守护进程运行

$ emacs --daemon

然后您可以通过运行以下命令连接到守护进程

$ emacsclient -nc

这将创建一个新框架 -c(如果您希望在终端中使用它,请使用 -t)并且不会占用终端 -n--no-wait)。请注意,某些程序(如 Mutt 或 Git(用于提交消息))会等待编辑器完成,因此您不能使用 -n 参数。如果您的默认编辑器设置为使用它,您将必须为这些程序指定备用编辑器(例如 emacsclient -a "" -t)。

作为 systemd 单元

Emacs 26.1 中包含了一个 systemd 单元。该单元与 Emacs 一起安装,但必须在安装 Emacs 后将其启用用户单元(而不是系统范围的)

$ systemctl --user enable --now emacs

服务启动后,Emacs 即可使用。

如果您希望能够通过 Wayland 上的 emacsclient 启动图形 emacs 框架,则需要特定的插入片段(除非您正在运行 emacs-wayland),如 EmacsWiki 中所示。

请注意,systemd 用户单元不会从登录 shell(如 ~/.bash_profile)继承环境变量。有关更多信息,请参阅 Systemd/User#环境变量

如果您将 emacs 作为守护进程启动,您可能需要将 VISUALEDITOR 环境变量设置为 emacsclient,以便启动编辑器的程序使用 emacsclient 而不是启动编辑器的全新实例。使用外部编辑器的程序包括电子邮件程序(用于编辑消息)、Git(用于编辑提交消息)和 less(用于编辑显示文件的 v 命令)。不要使用 -n (--nowait) emacsclient 选项,因为程序通常期望在编辑器退出时完成编辑。

还建议更改 Emacs 的任何 GUI 启动菜单项(或等效项)以指向 emacsclient 而不是 emacs,以便使用 emacs 守护进程而不是启动新的 emacs 进程。

获取帮助

Emacs 有一个内置教程,可以通过单击启动屏幕上的第一个链接并从菜单中选择帮助>Emacs 教程或按 C-h t 来访问。

要阅读英语以外的其他语言的教程,请使用命令 Alt x,然后输入 help-with-tutorial-spec-language

Emacs 本身就具有自文档化设计。因此,可以获得大量信息来确定特定命令的名称或其快捷键绑定,例如。使用 C-h C-h 查看所有上下文帮助绑定。

Emacs 还包含一组参考卡,对初学者和专家都很有用,请参阅 /usr/share/emacs/version/etc/refcards/

手册

如果您真的想精通 Emacs,最推荐的文档来源仍然是官方手册

  • Emacs:完整的 Emacs 用户手册。
  • Emacs FAQ。
  • Emacs Lisp 入门:如果您以前从未使用过任何编程语言。
  • Elisp:如果您已经熟悉编程语言。

您可以从 GNU.org 以 PDF 格式访问它们,也可以直接从 Emacs 本身通过嵌入式“info”阅读器访问:C-h i。按 m 选择书籍。

一些用户更喜欢使用“info”阅读书籍,因为它具有便捷的快捷方式,其段落适应窗口宽度,并且字体适应当前屏幕分辨率。有些人觉得它对眼睛的刺激较小。最后,您可以轻松地将书籍内容复制到任何 Emacs 缓冲区,甚至可以直接从示例中执行 Lisp 代码片段。

您可能想阅读 Info 书籍以了解更多信息:C-h i m info <RET>。在 info 模式下按 ? 可快速查看快捷方式列表。

配置

Emacs 的主要功能之一是其可扩展性和易于配置性。Emacs 具有内置的自定义引擎。您可以执行 M-x customize,这将显示自定义选项列表。有关如何使用此界面的信息,请参阅简易自定义 info 节点:(info "(emacs) Easy Customization")。您可以设置自定义仅对一个 Emacs 会话打开,或将其保存到配置文件中,以便跨 Emacs 会话保存它们。请注意,如果您选择应用并保存,自定义界面会执行此操作。

当 Emacs 启动时,它通常会尝试从“初始化文件”或简称“init 文件”加载 Lisp 程序。此文件(如果存在)指定如何为您初始化 Emacs。Emacs 在 ~/.emacs~/.emacs.el~/.emacs.d/init.el~/.config/emacs/init.el 中查找您的 init 文件。有关更多信息,请参阅 info 节点“Init File”: (info "(emacs) Init File")

技巧和窍门

TRAMP

TRAMP(透明远程访问,多协议)是一个扩展,顾名思义,它提供跨多种协议对远程文件的透明访问。当提示输入文件名时,输入特定格式将调用 TRAMP。一些例子

在以 root 权限打开 /etc/hosts 之前提示输入 root 密码

C-x C-f /sudo::/etc/hosts

通过 SSH 以“you”身份连接到“remotehost”并打开文件 ~/example.txt

C-x C-f /ssh:you@remotehost:~/example.txt

TRAMP 的路径通常采用“/[协议]:[[用户@]主机]:<文件>”的形式。

以“you”身份连接到“myhost”并使用 sudo 编辑 /etc/hosts

/ssh:you@remotehost|sudo:remotehost:/etc/hosts

TRAMP 支持的功能远不止上面的示例所表明的。有关更多信息,请参阅 TRAMP info 手册,该手册随 Emacs 一起分发。

将 Emacs 用作 git mergetool

默认情况下,Git 提供对使用 Emacs 的 Emerge 模式作为合并工具的支持。但是,您可能更喜欢 Ediff 模式。不幸的是,由于技术原因,git 不支持此模式。仍然可以通过在 emacs 调用时评估一些 elisp 代码来使用它。

.gitconfig
[mergetool.ediff]
    cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\" 

[merge]
	tool = ediff

请注意,该命令必须在一行上。在上面的示例中,我们启动了 Emacs 的新实例。您可能希望使用 emacsclient 以加快启动速度;但不建议这样做,因为 Ediff 调用不是很干净:它可能会搞乱您当前的 Emacs 会话。

如果您想要即时启动,可以使用 -q 参数。如果您想快速启动 Emacs,同时至少保留部分配置,可以使用以下命令调用 Emacs

emacs -q -l ~/.emacs-light

其中 light 配置文件仅加载 Ediff 所需的内容。

有关此技巧和 Ediff 问题的更多详细信息,请参阅 kerneltrap.orgstackoverflow

将 Caps Lock 用作 Control 键

一些用户喜欢这种行为以避免所谓的“emacs 小指”。在 GUI 桌面(Xorg 或 Wayland)、终端甚至控制台中实现此目的的一种好方法是使用 keyd。安装软件包并创建此配置文件

/etc/keyd/main.conf
[ids]	
*

[main]
capslock = overload(control, noop)

然后启用并启动 keyd 服务。

多路复用 emacs 和 emacsclient

在同一个 emacs-session 中打开新文件需要使用 emacsclient。可以包装 emacs 命令本身以执行更智能的工作,以便在会话存在时打开文件。

要启动会话,您需要 start-server。此代码段将在 emacs 的第一个会话中创建服务器。将其添加到您的 emacs 配置文件中。

.emacs or .emacs.d/init.el
(require 'server)
(unless (server-running-p)
  (server-start))

Shell 别名方法不适用于此,因为您还需要传递变量或启动您自己的独立会话。将其添加到 .bashrc 或 shell 的任何 rc 文件中。这将使您的 emacs 命令在传递参数时表现得像 emacsclient。

function emacs {
    if [[ $# -eq 0 ]]; then
        /usr/bin/emacs # "emacs" is function, will cause recursion
        return
    fi
    args=($*)
    for ((i=0; i <= ${#args}; i++)); do
        local a=${args[i]}
        # NOTE: -c for creating new frame
        if [[ ${a:0:1} == '-' && ${a} != '-c' && ${a} != '--' ]]; then
            /usr/bin/emacs ${args[*]}
            return
        fi
    done
    setsid emacsclient -n -a /usr/bin/emacs ${args[*]}
}

如果您想在新会话中运行它,只需执行 emacs file -

多重配置

您可以使用多个配置,并告诉 Emacs 加载其中一个或另一个。

例如,让我们定义两个配置文件。

.emacs
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/plugins" nil t)
(load "~/.emacs.d/theme" nil t)

这是我们为守护进程加载的完整配置。但是 plugins 文件很大且加载速度很慢。如果我们想生成一个不需要 plugins 功能的新 Emacs 实例,那么每次都加载它可能会很麻烦。

.emacs-light
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/theme" nil t)

现在我们使用以下命令启动 Emacs

emacs -q -l ~/.emacs-light

您可以创建一个别名来简化调用。

本地和自定义变量

您可以在配置文件中定义变量,这些变量稍后可以在文件中本地修改。

(defcustom my-compiler "gcc" "Some documentation")

现在,在任何文件中,您都可以通过两种方式定义局部变量,有关完整详细信息,请参阅手册

  • 使用 M-x add-file-local-variable-prop-line,它在开头添加一个注释行,类似于
// -*- my-compiler:g++; mode:c++ -*-
  • 或者您可以使用 M-x add-file-local-variable 在文件末尾附近添加行
// Local Variables:
// my-compiler: g++
// mode: c++
// End:

请注意,要使值生效,您需要调用 M-x revert-buffer

默认情况下,自定义变量被认为是不安全的。如果您尝试打开包含重新定义自定义变量的局部变量的文件,Emacs 将要求您确认。

您可以将变量声明为安全,从而消除 Emacs 的确认提示。您需要指定一个谓词,任何新值都必须验证该谓词,以便可以将其视为安全。

(defcustom my-compiler "gcc" "Some documentation" :safe 'stringp)

在前面的示例中,如果您尝试设置除字符串以外的任何内容,Emacs 会将其视为不安全。

自定义颜色和主题

可以使用 face 功能轻松自定义颜色。

(set-face-background  'region                 "color-17")
(set-face-foreground  'region                 "white")
(set-face-bold-p      'font-lock-builtin-face t ) 

您可以让 Emacs 告诉您光标所在位置的 face 的名称。为此,请使用 customize-face 函数。该功能将向您展示如何设置颜色、粗体、下划线等。

控制台中的 Emacs 可以处理 256 种颜色,但您必须为此使用合适的终端。例如,URxvt 支持 256 种颜色。您可以使用 list-colors-display 获取支持颜色的完整列表。这在很大程度上取决于终端。

另请参阅

SyncTeX 支持

Emacs 是一款强大的 LaTeX 编辑器。这主要是因为您可以调整或创建 LaTeX 模式以最适合您的需求。

但是,可能仍然存在一些挑战,例如 SyncTeX 支持。首先,您需要确保您的 TeX 发行版具有它。如果您手动安装了 TeX Live,您可能需要安装 synctex 软件包。

# umask 022 && tlmgr install synctex

SyncTeX 支持取决于查看器。在这里,我们将以 Zathura 为例,因此如果您想使用另一个 PDF 查看器,则需要调整代码。

(defcustom tex-my-viewer "zathura --fork -s -x \"emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"'\"'\"%{input}\"'\"'\")) (goto-line %{line}))'\"" 
  "PDF Viewer for TeX documents. You may want to fork the viewer
so that it detects when the same document is launched twice, and
persists when Emacs gets closed.

Simple command:

  zathura --fork

We can use

  emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'

to reverse-search a pdf using SyncTeX. Note that the quotes and double-quotes matter and must be escaped appropriately."
:safe 'stringp)

在这里,我们定义了我们的自定义变量。如果您正在使用 AucTeX 或 Emacs 默认 LaTeX 模式,您将必须相应地设置查看器。

现在使用 Emacs 打开 LaTeX 源文件,编译文档并启动查看器。Zathura 将生成。如果您按 Ctrl+Left click,Emacs 应将光标放置在相应位置。

systemd 文件的语法高亮

您可以使用 systemd-mode

或者,您可以简单地告诉 emacs 对 systemd 文件(服务、定时器等)进行着色,方法是将此添加到您的 init 文件中

 (add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))

emacs-nox 的剪贴板支持

要在 emacs-nox 中使用 Xorg 剪贴板,安装 xclip 并将以下函数添加到 ~/.emacs [3]

;; use xclip to copy/paste in emacs-nox
(unless window-system
  (when (getenv "DISPLAY")
    (defun xclip-cut-function (text &optional push)
      (with-temp-buffer
	(insert text)
	(call-process-region (point-min) (point-max) "xclip" nil 0 nil "-i" "-selection" "clipboard")))
    (defun xclip-paste-function()
      (let ((xclip-output (shell-command-to-string "xclip -o -selection clipboard")))
	(unless (string= (car kill-ring) xclip-output)
	  xclip-output )))
    (setq interprogram-cut-function 'xclip-cut-function)
    (setq interprogram-paste-function 'xclip-paste-function)
    ))
提示:您还可以通过添加以下内容来启用终端鼠标支持
;; xterm mouse support
(require 'mouse)
(xterm-mouse-mode t)

另请参阅 mwheel.el[死链接 2024-11-05 ⓘ]

软件包

Emacs 的功能可以通过第三方软件包进行扩展。内置软件包管理器 package.el 是官方支持的方式,尽管 Emacs 社区成员编写了其他几个软件包管理器。package.el 依赖于变量 package-archives 来查找软件包。默认情况下,这包括 Emacs Lisp 软件包归档 (ELPA)M-x list-packages 将创建一个缓冲区,列出您的 Emacs 知道的所有软件包。手册((info "(emacs) Packages")) 包含更多信息。

可以添加第三方软件包归档。其中最广泛使用的是 MELPA

许多流行的扩展程序在官方存储库中以软件包的形式提供,更多程序仍然通过 AUR 提供。此类软件包的名称通常带有“emacs-”前缀(例如,emacs-lua-mode),但并非总是如此(例如,auctexAUR)。

某些软件包可能需要您更改配置文件才能激活它们,以便在 Emacs 会话期间可以使用其功能。例如,如果您安装 auctexAUR,您将需要添加

(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)

到您的配置文件。其他软件包应在其源代码的注释部分或其 README 中告知您如何激活它们。

故障排除

Emacs 启动失败,并显示错误消息“Undefined color: "WINDOW_FOREGROUND"”

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

使用 Gccemacs 时,Emacs systemd 服务启动失败

当使用 Gccemacs(emacs-native-comppgtk-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

作为一种解决方法,编辑 [Service] 部分中 emacs.serviceWorkingDirectory 行。

emacs.service
[Service]
...
WorkingDirectory=/usr/lib/emacs/28.0.50/x86_64-pc-linux-gnu/
...
注意: WorkingDirectory 参数必须在可能的现有 Restart 参数之前定义。

彩色输出问题

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

~/.emacs 中包含以下内容可以解决问题

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

在 X Windows 中显示字符的问题

如果当您在 X windows 中启动 emacs 时,主窗口中的所有字符都是带有黑色边框的白色框(如果您尝试查看未安装正确字体的字符时会看到这些框),则您需要安装 xorg-fonts-75dpi 和/或 xorg-fonts-100dpi 并重启 X windows。

启动缓慢

提示: 要消除启动时间,用户可能希望考虑运行 Emacs #作为 systemd 单元

启动时间缓慢通常是由以下两种情况之一引起的。

要确定可能是哪种情况,请使用以下命令运行 Emacs

$ emacs -q
  • 错误,尤其是在 /etc/hosts 中,通常会导致启动 Emacs 时出现 5 秒以上的延迟。有关信息,请参阅网络配置指南中的“设置主机名”。
  • 您可能需要监视从您的计算机发送的任何网络数据包(使用 Wireshark 等程序)以查看是否有任何异常行为。
  • 搜索原因的一种简单方法是注释掉(即,在行前加上“;”)~/.emacs(或 ~/.emacs.d/init.el)的可疑部分,然后再次启动 Emacs 以查看是否有任何变化。请记住,“require”和“load”的使用会减慢启动速度,尤其是在与较大的扩展程序一起使用时。作为规则,它们应该仅在其目标是:Emacs 启动后需要一次或为扩展程序提供很少的“autoloads”时使用。否则,请直接使用“autoload”函数。例如,代替
    (require 'anything)
    您可以这样使用
    (autoload 'anything "anything" "Select anything" t)

无法打开加载文件:...

此错误的最常见原因是“load-path”变量未包含扩展程序所在目录的路径。要解决此问题,请在尝试加载扩展程序之前,将相应的路径添加到要搜索的列表中

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

当尝试使用软件包进行扩展并且 Emacs 已配置为前缀不是 /usr 时,需要更新 load-path。将以下内容放在 ~/.emacs 中,然后再放置软件包提供的说明

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

如果手动编译 Emacs,请记住默认前缀是 /usr/local

死键问题:“<dead-acute> 未定义”

在 Google 上搜索此错误,我们找到了此链接:https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html 解释了问题。使用重音键的正常方式无法按预期工作。尝试重音一个词,如“fiancé”,将产生上述消息。

解决此问题的一种方法是将以下行放在您的启动文件 ~/.emacs

  (require 'iso-transl)

不,这不是错误,而是新 Emacs 版本的功能。阅读邮件列表中关于它的后续消息,我们发现它 [4]

似乎没有任何内容自动加载,因为 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,这将重绘终端的显示。如果此问题频繁发生,您可能希望将该命令绑定到一个键,例如通过放置类似

(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

Shift + 箭头键在 tmux 内的 emacs 中不起作用

在您的 tmux 配置中启用 xterm-keys

~/.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 主题。

要在 KDE 中强制 Emacs 完全最大化,请单击标题栏中的 Emacs 图标,然后选择更多操作 > 特殊窗口设置。然后在大小和位置选项卡中,选择遵守几何限制,在下拉菜单中选择强制,然后从右侧的单选按钮中选择

替代方案

有许多“较小”的文本编辑器,至少在表面上与 GNU Emacs 相似。以下是其中一些

  • mg — 用 C 编写的 Emacs 的轻量级实现。请注意,它不支持 UTF-8。
https://github.com/hboetes/mg || mg
  • Zile — “Zile Is Lossy Emacs”,一个轻量级克隆,编写时尽可能与 Emacs 相似。Zile 没有 UTF-8 支持。
https://gnu.ac.cn/software/zile/ || zileAUR
  • uemacs — Linus Torvalds 自定义的“Micro-emacs”版本。
https://git.kernel.org/pub/scm/editors/uemacs/uemacs.git || uemacs-gitAUR
  • emacs-ng — 一种新的 Emacs 方法 - 包括 TypeScript、线程、异步 I/O 和 WebRender。
https://github.com/emacs-ng/emacs-ng || emacs-ng-gitAUR
  • qemacs — “Quick Emacs”,基于 Emacs Lisp 解释器,但它具有较小的代码库和简化的用户界面。
https://bellard.org/qemacs/ || qemacsAUR
  • sxemacs — xemacs 的一个分支。
https://www.sxemacs.org/ || sxemacsAUR
  • jove — Jonathan's Own Version of Emacs 是一个类似 Emacs 的编辑器,没有 Lisp。
https://github.com/jonmacs/jove || joveAUR

Emacs 发行版

Emacs “发行版”是 emacs 软件包和自定义项的集合。它们比您自己自定义 emacs 更容易安装和使用(但对您的自定义程度较低)。

  • Spacemacs - 社区驱动的 Emacs 发行版 - 最好的编辑器既不是 Emacs 也不是 Vim,而是 Emacs *和* Vim!
  • Doom Emacs - 为顽固的火星黑客准备的 Emacs 框架
  • Witchmacs - 最可爱的 Emacs 发行版
  • Yukimacs - 一个从零开始构建的 GNU/Emacs 配置(没有 Spacemacs 或 Doom Emacs),深受 Uncle Dave’s Emacs 和 Witchmacs 的启发。

更多:入门套件

另请参阅