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使用某些 等宽字体 就可以解决
- 等宽字体, 两个例子
- 使用以下配置可以解决, 只有对应某个系统, 就能加载对应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))))))
Ripgrep 无法搜索中文
- 例如使用以下命令无法搜索中文:
- consult-ripgrep
- ripgrep-regexp
;; 解决 ripgrep 无法搜索中文和 consult-ripgrep 无法搜索中文
(setq default-process-coding-system '(utf-8-unix . gbk)) ;; 默认(utf-8-dos . utf-8-unix)