几个小时前宣布,Emacs 29 的分支现在从 master 分支中切掉了!这意味着该emacs-29
分支从现在起将不再接收任何新功能,而只会接收错误修复。
那么,这个新的主要版本有什么新内容?我浏览了NEWS
文件,这里有一些我觉得有趣甚至令人兴奋的变化。
文章于 11 月 30 日 13:15 UTC 更新
主要特点
很可能会出现一些重大改进,以下是对我来说最突出的改进。
Eglot 现在是 Emacs 核心的一部分
在过去几年中,LSP 为文本编辑器提供了难以置信的功能,相对容易地为它们提供类似 IDE 的功能。除了 Elisp 开发,我编写的大部分代码现在都是在 LSP 服务器的帮助下完成的,它与 Emacs 一起运行并分析我的代码,为我建议和执行更改和操作。
Emacs 存在多个 LSP 集成,例如LSP Mode、Eglot和lsp-bridge。在这三者中,Eglot 现在是 Emacs 核心的一部分!您不再需要安装包,只需注册一个 LSP 服务器,自动完成、文档、错误检测和其他功能将立即可用!
我必须承认我并不真正了解 Eglot,我个人使用 LSP 模式,但是随着 Emacs 核心的添加,我可能会尝试切换。
Tree-Sitter 也是 Emacs 核心的一部分
如果您不知道,Emacs 当前的语法突出显示目前是基于正则表达式系统。虽然这不是_最糟糕_的使用方式,但也不是最好的,而且在处理较大的文件时会变得相当慢。
Tree-Sitter 将编程语言解析为具体的语法树。从那里,不仅可以高速完成语法高亮显示,而且可以对代码进行更深入的分析,并且还可以实现语法操作等操作,因为语法树本身可以作为可以操作的对象使用!
如果您想了解有关 Tree-Sitter 本身的更多信息,可以查看官方 Tree-Sitter 网站,或者您甚至可以查看 Tree-Sitter 的创建者 Max Brunsfeld 发表的演讲。
好吧,这现在是 Emacs 中的原生解决方案!目前,Emacs 的 Tree-Sitter 支持目前主要的模式:
bash-ts-mode
c-ts-mode
c -ts-mode
csharp-ts-mode
css-ts-mode
java-ts-mode
js-ts-mode
json-ts-mode
python-ts-mode
typescript-ts-mode
Tree-Sitter 目前在新分支中也拥有特殊地位,emacs-29
因为新功能仍然可以添加到它,因为它与 master 分支的合并仍然是最近的。所以我们可能会看到 Emacs 的主要模式列表变得更长一些,特别是考虑到 Tree-Sitter 试图使添加新语言相对容易。
如果您迫不及待地想测试 Tree-Sitter,现在已经有另一个适用于 Emacs 的软件包可供您使用。请注意,这与集成到 Emacs 中的包不同。
从源安装包package.el
如果您使用Straight,您可能熟悉直接从他们的 Git 存储库安装包。嗯,好消息,现在可以使用 Emacs 的内置打包系统从 Git 安装包了package.el
!可以使用 new 函数来完成package-vc-install
,并且可以使用package-vc-update
或更新以这种方式安装的包package-vc-update-all
。
关于 的主题package.el
,还有一个新功能package-report-bug
,允许 Emacs 用户直接从 Emacs 向包的开发人员报告错误!但请注意,它仅适用于通过package.el
. 由于我是use-package
andstraight.el
用户,因此在我调用该命令时没有列出包。
Org 9.6
正如 org-mode 维护者之一Bastien Guerry在法语 Emacs 邮件列表中确认的那样,Org 9.6 将成为 Emacs 29 的一部分!我也可能会尝试写一篇关于这个新版本的文章,它已经在 GNU ELPA 上可用!
Emacs 核心中的使用包
在Emacs 开发邮件列表上也已确认,use-package
一个很棒的包管理器将成为 Emacs 29 的一部分,尽管它最初并未包含在该emacs-29
分支中。
纯 GTK Emacs 为 Wayland 而来!
Emacs 在 Linux 上的主要问题之一是它在 GUI 模式下运行时对 Xorg 的依赖。运行 Xorg 时,这不是真正的问题,但 Wayland 在过去几年变得越来越普遍,即使有 XWayland 的存在,这也成为一个烦恼。
好吧,不要害怕,因为纯 GTK Emacs 就在这里!它现在可以在无 Xorg 的情况下构建并在 Wayland 中本地运行!
请注意,Wayland 基本上是纯 GTK Emacs 的唯一用例。如果您不使用 Wayland,Emacs 将显示一条警告消息,因为如果您运行的是 Xorg,它很可能会导致问题。在我的例子中,当缓冲区的内容更新时,我有时会看到一些幻影文本(尽管我仍然需要纯 GTK,因为我在 Xorg 和 Wayland 之间交替)。
提前编译 EmacsLisp 文件
如果您的 Emacs 是使用 GCC 的 Just In Time 库构建的,那么 Emacs 28 可以原生编译 EmacsLisp。这导致了令人印象深刻的性能提升,这使得 Emacs 比以前更加敏捷。我遇到的唯一问题是 Emacs 只会在第一次加载 EmacsLisp 文件时编译它们。
这已不再是这种情况!如果您现在使用 编译 Emacs --with-native-compilation=aot
,Emacs 的本机 EmacsLisp 文件将与 Emacs 本身一起本机编译!但请注意,它在大多数机器上可能会很慢,因此您在第一次启动 Emacs 时不编译这些文件而节省的时间基本上会转移到编译 Emacs 本身时。值得你花时间吗?就我而言,我会说是,因为当我编译 Emacs 时,我通常并不着急。但在你的情况下?好吧,自己测试一下看看。
本地访问 SQLite 数据库
现在可以使用对 SQLite 和 sqlite3 库的本机支持来构建 Emacs。事实上,这是现在的默认行为,因为您需要传递--without-sqlite3
给 Emacs 的构建配置脚本以防止它发生。
这是一个新sqlite-mode
功能,它允许您在 Emacs 中探索 SQLite 数据库并与它们交互。看看sqlite-mode-open-file
功能吧!
HaikuOS 支持
对于所有三个 HaikuOS 用户来说,好消息是,您现在可以使用 Emacs 了!(说真的,我应该有一天去看看 HaikuOS)
此外,它还支持一个可选的窗口系统端口到 Haiku,带有--with-be-app
. 请注意,您将需要 Haiku Application Kit 开发头文件和 C 编译器。否则,Emacs 只会在终端中运行。如果您还想将 Cairo 添加到组合中,您可以添加--with-be-cairo
.
C# 的新主要模式
csharp-mode
现在是 Emacs 的原生主要模式,并且基于cc-mode
.
次要特征
在脚本中使用 Emacs 更容易!
如果您喜欢编写脚本,尤其是编写 Lisp 脚本,Emacs 现在支持该选项-x
以执行用 EmacsLisp 编写的脚本。当使用 as shebang 执行这样的脚本时#!/usr/bin/emacs -x
,Emacs 不会读取它的 init 文件(如 with -Q
),而是会立即执行 Elisp 代码并将最后一个值返回给脚本的调用者(很可能是您调用脚本的 shell从)。
TRAMP 原生支持 Docker、Podman 和 Kubernetes
三个新连接现在可用于 TRAMP:
docker
podman
kubernetes
您现在可以直接从 Emacs 访问您的容器化环境,而无需编写自定义代码。
自定义用户目录
现在可以更轻松地启动自定义 Emacs 配置文件,而无需使用chemacs2等工具并添加 flag --init-directory
。这可以设置为 Emacs 的任何目录,user-emacs-directory
其中包括init.el
随附的目录。.emacs
我不使用文件,而是使用文件的另一个原因init.el
。
支持 Webp 图片
很长一段时间以来,Emacs 已经能够显示图像,但 webp 还不行。好吧,现在已经解决了!事实上,对 webp 图像的支持已成为默认行为,因为您需要传递--without-webp
给 Emacs 的配置脚本以禁用 webp 支持。
C 模式现在支持 C 20 标准
是的。没什么好说的,真的。编码愉快!
更好地处理.pdmp
文件
Emacs 有几个版本能够将其状态转储到pdmp
文件中以加快启动时间。那么现在,当创建这样一个文件时,它会在其名称中包含其当前状态的指纹,尽管它仍然会优先考虑一个emacs.pdmp
文件(如果存在)。
更好的鼠标和触摸板支持
Emacs 现在使用 XInput 2,它使 Emacs 能够支持更多的输入事件,例如触摸板事件。例如,默认情况下,触摸板上的捏合手势会增大或减小当前缓冲区的文本大小。这要归功于pinch
伴随touch-end
.
Unicode 15.0 和表情符号
Emacs 现在支持Unicode 15.0,这是目前最新的 Unicode 版本。虽然这没有直接关系,但已经引入了很多与表情符号相关的新功能。新前缀C-x 8 e
现在会导致一些与表情符号相关的新命令:
C-x 8 e e
或者C-x 8 e i
插入表情符号 ( emoji-insert
)
C-x 8 e s
搜索表情符号 ( emoji-search
)
C-x 8 e l
列出新缓冲区中的所有表情符号 ( emoji-list
)
C-x 8 e r
插入最近插入的表情符号 ( emoji-recent
)
C-x 8 e d
描述一个表情符号 ( emoji-describe
)
C-x 8 e
和C-x 8 e -
增加和减少任何字符的大小,尤其是表情符号(emoji-zoom-increase
和emoji-zoom-decrease
分别)
还有新的输入法emoji
,允许您输入例如:grin:
以获得表情符号