查看原文
其他

Emacs 29 新特性预览

写代码的西瓜 EmacsTalk 2023-05-21

作为日常使用 Emacs 进行开发的重度用户,困扰笔者的一个问题时,同时打开多个项目时, xref 会错乱,这十分烦人,忍受一段时间后,最终去 SO 提问[1]了一下,Emacs 又一次没令我失望,29 里面已经有了解法:

(setq xref-history-storage 'xref-window-local-history)

于是花了一点点时间,从 28 升级到了 29,只能说太香了,还在 28 踌躇的读者可以着手升级了。这里列举一些笔者认为 29 中一些比较实用的更新,完整列表可以去看 NEWS.29[2]

新包

  • eglot: Emacs Client for the Language Server Protocol.
  • use-package: Declarative package configuration.
  • wallpaper: 设置桌面壁纸
  • js-json-mode: 轻量级的 js-mode,打开 json 时用
  • 使用 tree-sitter 重写的 major mode: 当编译时开启 tree-sitter 选项时启用。

新函数

  • rename-visited-file: Emacs 终于支持同时重命名 buffer 和文件名了。
  • delete-process: 变成了交互式命令
  • restart-emacs:save-buffers-kill-emacs 类似,只是在关闭 emacs 后,会重新用同样的启动参数再次启动
  • scratch-buffer: 交互式命令,切换到 *scratch* buffer,可以解决误删的问题
  • project-list-buffers: 用于展示当前项目的 buffer
  • xref-find-references-and-replace: 重命名变量
  • duplicate-lineduplicate-dwim: 复制当前行,当有 active region 时 dwim 会复制当前 region,否则就是当前行
  • find-sibling-file: 寻找“兄弟”文件,兄弟文件是由 find-sibling-rules 这个变量定义的。比如可以定义如下规则来打开 .c 对应的 .h 文件:("\\\\([^/]+\\\\)\\\\.c\\\\\\='" "\\\\1.h")
  • sqlite-mode-open-file: 可以直接以 sqlite-mode 打开 sqlite 数据库文件,并且可以直接浏览、修改表数据!
  • emoji-insert, emoji-list, emoji-search, emoji-recent 方便快捷的在 Emacs 中输入 emoji 💯 😎
  • ensure-empty-lines: 向上插入一空行
  • package-update, package-update-all: 更新包,无需再使用 list-packages

新选项

  • eww-url-transformers: 用于在访问 URL 前进行改写,默认它会移除 utm_ 这个用于追踪的参数
  • xref-history-storage : 如何保存 xref 的历史 marker,一个有用的选项是 xref-window-local-histor ,这样在用 Emacs 同时打开多个项目时, xref 就不会错乱了。

优化

  • 长行优化。主要是下面两个 commit。这样按说就不再需要在使用 so-long-mode
  1. [Actually fix the long lines display bug](https://github.com/emacs-mirror/emacs/commit/1792cbaddc33772c344e45fb9478bee85fee66e7\ "Actually fix the long lines display bug")
  2. Improvements to long lines handling.[3]
  • kill-buffer 如果没有保存会给出 save then kill 的提示
  • tramp 支持了 docker podman kubernetes
  • Deprecated

    EIEIO 相关 compat 函数默认已经不再加载,最主要的就是 defmethod defgeneric 函数,如果之前配置中有用到, EIEIO 相关 compat 函数默认已经不再加载,最主要的就是 defmethod defgeneric 函数,如果之前配置中有用到, EIEIO 相关 compat 函数默认已经不再加载,最主要的就是 defmethod defgeneric 函数,如果之前配置中有用到, 可以直接加上前缀 cl-{func} 即可,比如下面这个 PR:

    • Fix defmethod by sarg · Pull Request #3 · ukaszg/aria2[4]

    除此之外,在升级过程中还有可能遇到下面的 warning,根据提示来修复即可。

    twittering-mode.el: Warning: ‘block’ is an obsolete alias (as of 27.1); use ‘cl-block’ instead.
    twittering-mode.el: Warning: ‘return-from’ is an obsolete alias (as of 27.1); use ‘cl-return-from’ instead.
    twittering-mode.el: Warning: ‘decf’ is an obsolete alias (as of 27.1); use ‘cl-decf’ instead.
    twittering-mode.el: Warning: ‘incf’ is an obsolete alias (as of 27.1); use ‘cl-incf’ instead.

    Emacs Server

    • emacsclient 支持 -r 新选项。表示复用现有的 GUI frame,如果没有的话,则新创建一个

    参考

    • Marcin Borkowski: 2022-12-19 A few new things in Emacs 29[5]

    参考资料

    [1]

    SO 提问: https://stackoverflow.com/questions/75791497/

    [2]

    NEWS.29: https://github.com/emacs-mirror/emacs/blob/master/etc/NEWS.29

    [3]

    Improvements to long lines handling.: https://github.com/emacs-mirror/emacs/commit/e7b5912b235936b304701ba6b1e808d9b197fd4f

    [4]

    Fix defmethod by sarg · Pull Request #3 · ukaszg/aria2: https://github.com/ukaszg/aria2/pull/3

    [5]

    Marcin Borkowski: 2022-12-19 A few new things in Emacs 29: https://mbork.pl/2022-12-19_A_few_new_things_in_Emacs_29


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存