Emacs Issue 前言 这个文章是 记录个人使用 Emacs 相关信息/问题
它可能不适用于所有人
这可能会给遇到相同问题时的 Emacser 有所帮助!
如果你遇到了某些 Emacs 相关问题, 并解决了, 可以在下面 评论区 记录下来, 我会尝试添加到文章当中
Issue Minibuffer 如何换行? C-q C-j
让 Minibuffer 支持使用 拼音 查找 例如在 org-mode 中使用 consult-imenu 命令时, 弹出的内容可以使用 拼音 查找 以下方法本人是使用 orderless, vertico, consult, 三个包配合用的 (use-package vertico :ensure t :hook (after-init . vertico-mode)) (use-package consult :ensure t) (use-package orderless :ensure t :config (setq completion-styles '(orderless basic) completion-category-defaults nil completion-category-overrides '((file (styles partial-completion)))) ;; 对 vertico 进行拼音查找, 全拼的第一个字母, 例如找 配置, 输入 pz 两个字母 (defun completion--regex-pinyin (str) (orderless-regexp (pinyinlib-build-regexp-string str))) (add-to-list 'orderless-matching-styles 'completion--regex-pinyin) ) ;; 如果使用的 小鹤双拼, 可以使用 https://github.com/ISouthRain/pinyinlib.el 仓库, 配置: (setq pinyinlib-use-method 'xiaohe) Windows org-mode 使用 GnuPG(GPG) 加密后无法解密, 加密信息出现 ^M 比如使用 org-crypt 这个包进行 GPG 加密时, 却无法解密 原因是 文件换行符 问题, Windows 系统的默认换行符是 CRLF, 只需将 CRLF 改为再加密就不会出现 CRLF 方法一: 添加函数, 删除 ^M 结尾的信息再进行解密 ;; 解决 ^M 解密问题 (defun freedom-org-decrypt-entry () "移除行尾 ^M(CRLF) 并解密 Org-decrypt Replace DOS eolns CR LF with Unix eolns CR" (interactive) (goto-char (point-min)) (while (search-forward "\r" nil t) (replace-match "")) (org-decrypt-entry)) 方法二: 加密之前 将文件的换行符改为 LF , 例如: C-x <RET> f utf-8-unix <RET> Windows Emacs 使用 Daemon 方式打开文件时, 文件名乱码导致无法打开对应文件 我使用添加以下配置修复 (require 'server) ;; 如果没有启动 daemon server 就启动 (unless (server-running-p) (server-start)) ;; 防止 windows 使用 server 打开中文文件名乱名导致无法打开文件 (when (eq system-type 'windows-nt) (setq locale-coding-system 'gb18030) ;此句保证中文字体设置有效 (setq w32-unicode-filenames 'nil) ; 确保file-name-coding-system变量的设置不会无效 (setq file-name-coding-system 'gb18030) ; 设置文件名的编码为gb18030 ) Org-mode 的 Table 表格没有对齐问题 这个是由于 中文字体 和 英文字体宽度不等宽导致, 设置Emacs使用某些 等宽字体 就可以解决 等宽字体, 两个例子 Iosevka(英文) GitHub - be5invis/Iosevka: Versatile typeface for code, from code. 霞鹜文楷(中文) GitHub - lxgw/LxgwWenKai: An open-source Chinese font derived from Fontworks’… 使用以下配置可以解决, 只有对应某个系统, 就能加载对应Emacs的配置, Emacs 自动识别 这个配置也相当于配置了 Emacs字体相关设置 darwin 属于 Mac 系统 Windows-nt 属于 Windows 系统 gnu/Linux 属于 Linux 系统 (when (eq system-type 'darwin) (setq fonts '("SF Mono" "冬青黑体简体中文")) (set-fontset-font t 'unicode "Apple Color Emoji" nil 'prepend) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 16k))) (when (eq system-type 'windows-nt) ;; (setq fonts '("Iosevka" "霞鹜文楷")) (setq fonts '("Iosevka" "微软雅黑")) (set-fontset-font t 'unicode "Segoe UI Emoji" nil 'prepend) (set-fontset-font t 'unicode "Segoe UI Symbol" nil 'append) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 20)));; 只有 双数 才能 对齐 (when (eq system-type 'gnu/linux) (unless IS-Termux (setq fonts '("Iosevka" "微软雅黑")) (set-fontset-font t 'unicode "Segoe UI Emoji" nil 'prepend) (set-fontset-font t 'unicode "Segoe UI Symbol" nil 'append) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 20)))) (if (display-graphic-p) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family (car (cdr fonts)))))) 类似方法有 GitHub - tumashu/cnfonts: emacs中文字体配置工具。可以快速方便的的实现中文字体和英文字体等宽(也就是常说的中英文对齐)。 Ripgrep 无法搜索中文 例如使用以下命令无法搜索中文: consult-ripgrep ripgrep-regexp ;; 解决 ripgrep 无法搜索中文和 consult-ripgrep 无法搜索中文 (setq default-process-coding-system '(utf-8-unix . gbk)) ;; 默认(utf-8-dos . utf-8-unix)