如题,使用C-x C-s 或者用 evil 的 “:w” 保存 elisp 文件,会导致 elisp 代码被打乱。 有人碰到过这种问题吗?不确定是不是 emacs 的问题,因为不是每次编辑 elisp 文件都会这样。OS 是 Mac Monterey,Emacs 是 EmacsForMacOS 27.2-3。
试试 C-h v after-save-hook
,看看 after-save-hook
上绑定了些什么?
很早就有类似的问题,不过我也不知道咋解决
我没用鼠标,打乱的代码里只是被插入了空格和换行。而且只是前面一些行,不是整个文件。
本来是这样的:
(global-hl-line-mode t)
(setq inhibit-startup-message t)
(scroll-bar-mode -1) ;; Disable visible scrollbar
(tool-bar-mode -1) ;; Disable the toolbar
(tooltip-mode -1) ;; Disable tooltips
(set-fringe-mode 10);;Give some breathing room
(menu-bar-mode 1);; Disable the menu bar
(setq-default cursor-type 'bar)
(column-number-mode t)
(global-display-line-numbers-mode t)
;; Disable line numbers for some modes
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
treemacs-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
(setq display-line-numbers-type t) ;;t(means absolute), relative, visual
;; auto pair
(use-package electric-pair-mode
:ensure nil
:hook (prog-mode . electric-pair-mode)
)
(use-package paren ;; show paren mode
:ensure nil ;; builtin emacs and enabled by default
:custom
(setq show-paren-when-point-inside-paren t)
(setq show-paren-style 'mixed)
)
保存之后变成这样了:
(global - hl - line - mode t)(setq inhibit - startup - message t)(scroll - bar -
mode - 1);
;
Disable visible scrollbar(tool - bar - mode - 1);
;
Disable the toolbar(tooltip - mode - 1);
;
Disable tooltips(set - fringe - mode 10);
;
Give some breathing room(menu - bar - mode 1);
; Disable the menu bar
(setq-default cursor-type 'bar)
(column-number-mode t)
(global-display-line-numbers-mode t)
;; Disable line numbers for some modes
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
treemacs-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
(setq display-line-numbers-type t) ;
;
t(means absolute), relative, visual
;
; auto pair
(use-package electric-pair-mode
:ensure nil
:hook (prog-mode . electric-pair-mode)
)
(use-package paren ;; show paren mode
:ensure nil ;; builtin emacs and enabled by default
:custom
(setq show-paren-when-point-inside-paren t)
(setq show-paren-style 'mixed)
)
;; auto pair
后面又都是正常的。
不知道你是什么配置?
先试试 emacs -q
会不会有问题,如果没问题的话,可以试试对配置采用二分法排查看看是哪个包引起的bug。
emacs -q
可以正常启动,如果把配置文件修改正确,GUI 启动也一切正常。头疼的是这个问题不好复现,不是每次编辑文件都会这样,而是打开 emacs 一段时间后会出现这种情况。而且好像不只是 elisp,之前编辑一个 makefile 文件的时候也出现了这种情况。
把配置注释掉一半用用看有没问题,如果有问题,再注释掉一半,这样缩小范围,就能锁定引起问题的包了。(在没方向的时候这个比较笨的办法有时是最有效的😄)