Emacs
Emacs 是一个可扩展、可定制、自带文档的实时显示编辑器。Emacs 的核心是一个 Emacs Lisp 解释器,Emacs 大部分内置功能和扩展都是用这种语言实现的。GNU Emacs 使用 GTK 作为其 X 工具包,但它在 CLI 环境中也能同样出色地运行。
安装
安装 以下软件包之一
- emacs - 稳定版本,
- emacs-nox - 无 GUI;仅在终端模拟器上运行,
- emacs-wayland - 启用 PGTK,
- emacs-lucidAUR - 使用 Lucid (Athena) 工具包代替 GTK;较少错误,较少花哨 [1][2]。该界面现在是 Emacs Android 端口的默认界面。
如果您希望 Emacs 拼写检查工作,另请安装 aspell 和 aspell 语言,例如 aspell-en
可以搜索其他变体,例如 emacs-gitAUR 提供了 GNU Emacs 的开发分支。
用法
在启动 emacs 之前,您应该知道如何关闭它(尤其是在终端中运行时):使用 Ctrl+x
Ctrl+c
组合键。
要启动 Emacs,请运行
$ emacs
或者,从控制台使用它
$ emacs -nw
或者,为了快速加载(无 .emacs)并在 CLI 中编辑
$ emacs -Q -nw
如果您安装了 nox 版本,则 emacs
和 emacs -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 框架,则需要特定的 drop-in 代码段(除非您正在运行 emacs-wayland),如 EmacsWiki 中所示。
请注意,systemd 用户单元不会从登录 shell(如 ~/.bash_profile
)继承环境变量。有关更多信息,请参见 Systemd/User#环境变量。
如果您将 emacs 作为守护进程启动,您可能希望将 VISUAL
和 EDITOR
环境变量设置为 emacsclient
,以便启动编辑器的程序使用 emacsclient 而不是启动编辑器的全新实例。使用外部编辑器的程序包括电子邮件程序(用于编辑消息)、Git(用于编辑提交消息)和 less(用于编辑显示文件的 v
命令)。不要对 emacsclient 使用 -n
(--nowait
) 选项,因为程序通常希望在编辑器退出时完成编辑。
还建议更改 Emacs 的任何 GUI 启动菜单项(或等效项)以指向 emacsclient 而不是 emacs,以便使用 emacs 守护进程而不是启动新的 emacs 进程。
获取帮助
Emacs 有一个内置教程,可以通过单击启动画面上的第一个链接并从菜单中选择Help>Emacs Tutorial或按 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 Intro:如果您以前从未使用过任何编程语言。
- 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
,这将显示自定义选项列表。有关如何使用此界面的信息,请参见 Easy Customization 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 支持的功能远不止以上示例所示。有关更多信息,请参阅随 Emacs 分发的 TRAMP info 手册。
将 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
其中,轻量级配置文件仅加载 Ediff 所需的内容。
有关此技巧和 Ediff 问题的更多详细信息,请参见 kerneltrap.org 和 stackoverflow。
将 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 别名方法不足以解决此问题,因为您还需要传递变量或启动您自己的独立会话。将其添加到 shell 的 .bashrc
或任何 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 将认为它是不安全的。
自定义颜色和主题
可以使用面工具轻松自定义颜色。
(set-face-background 'region "color-17") (set-face-foreground 'region "white") (set-face-bold-p 'font-lock-builtin-face t )
您可以让 Emacs 告诉您光标所在位置的面名称。为此,请使用 customize-face 函数。该工具将向您展示如何设置颜色、粗体、下划线等。
控制台中的 Emacs 可以处理 256 种颜色,但是您必须使用合适的终端才能实现此目的。例如,URxvt 支持 256 种颜色。您可以使用 list-colors-display 获取支持颜色的完整列表。这在很大程度上取决于终端。
参见
- https://www.emacswiki.org/emacs/ColorThemes
- https://gnu.ac.cn/software/emacs/manual/html_node/emacs/Custom-Themes.html
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+鼠标左键单击
,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)
软件包
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-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/ ...
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
$ 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-<重音> 前缀的输入法,但是您和我正在做的是仅按一个死键(^、´、`、~、¨)进行重音,然后再按另一个键来“组合”重音字符。并且在此过程中没有使用 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。
- Zile — “Zile Is Lossy Emacs”,一个轻量级克隆,旨在尽可能与 Emacs 相似。 Zile 不支持 UTF-8。
- uemacs — 由 Linus Torvalds 定制的 “Micro-emacs” 版本。
- emacs-ng — 一种 Emacs 的新方法 - 包括 TypeScript、线程、异步 I/O 和 WebRender。
- qemacs — “Quick Emacs”,基于 Emacs Lisp 解释器,但它具有更小的代码库和简化的用户界面。
- sxemacs — xemacs 的一个分支。
- jove — Jonathan's Own Version of Emacs,是一个类似 Emacs 但没有 Lisp 的编辑器。
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 的启发。
更多: Starter Kits