不谈Spacemacs,只谈Centaur Emacs

不确定是否跟MacBook芯片有关,我本地的macOS(Intel x86)和Windows上测试都没有问题。

你还可以再尝试下:

  1. emacs -Q 重现。
  2. 在custom.el 中打开(setq centaur-prettify-org-symbols-alist nil)
  3. 禁用org-modern
  4. 在init.el 去掉 init-org.el.
  5. 打开toggle-debug-on-error, C-g看backtrace(如果起作用)。
  6. 如果还有可能,用profile工具看看CPU占用情况。

和大佬汇报下进度,我使用 emacs -nw 模式打开没出现问题,截图如下:

使用 emacs -Q 命令打开,再输出同样的内容也没有问题,截图如下:

有可能是图形模式和M芯片不对头吧

二分法排除下,建议关掉corfu-mode试试

实不相瞒,不知道corful-mode怎么关: 没找到这个mode在哪 :frowning_with_open_mouth:

Centaur Emacs是不是开启了什么自动格式化的功能或插件啊,有时候上下移动光标缩进都会改变,这个改变一般都不正确,而我甚至不能修正这些错误,就比如这个图里面的:family和:height

很明显缩进不正确,但是我不管怎么换行、删除然后重新输入等等,都不能让它们对齐,甚至连elisp-mode的C-M-\都不行,然而我运行emacs -Q后使用C-M-\是可以正确格式化的 emacs是在wsl里面安装的,配置文件是全新安装的,我没有修改任何配置,custom.el安装完第一次打开就是不对齐的,这个问题在msys2里面安装的emacs也可以复现

emacs -Q格式化的文件重新用Centaur Emacs打开后显示仍然不对齐

然而我用其他任何一个编辑器打开都是显示对齐的,这又是什么问题?

换个字体试试

这是重新安装后换了字体的结果,不对齐的位置变了,但是仍然不对齐

换用非Nerd字体后结果是一样的 emacs -Q打开是全部对齐的

这个是emacs -nw打开的结果,一样不对齐,用的终端是wezterm,字体是Iosevka NF,这个问题甚至只有Centaur Emacs有,不管是Vanilla Emacs还是Doom Emacs打开同样是对齐的,这是Doom Emacs打开的

用GUI是什么效果?根据提示,问题描述清楚些才好定位。跟特殊环境相关的恕我无能为力

自动控制缩进的插件大概率是aggresive indent?可以试着先关闭这个插件

然后这里的错位可能和制表符有关系,换成空格应该更好些,可以设置 (setq-default indent-tabs-mode nil)

试试往这两个方向排查吧

gui和terminal下的都试过,上面最开始发的图片都是VcXsrv下测试的,而且我用msys2安装的windows原生emacs也有这个问题,别的emacs发行版都正常,晚上有空我可以开虚拟机测试

问题是这样的,同一个文件在Centaur Emacs和其他编辑器包括其他Emacs发行版下显示的缩进不同,就像前面截图显示的,缩进正确的文件在Centaur Emacs中显示不正确,而且当进行某些操作,比如查询函数文档、查询字典或者换行等操作,缩进会发生变化,但是没有显示文件已被修改,使用Vanilla Emacs或者别的编辑器打开这个文件,缩进仍然是正确的,这个问题在wsl的emacs和msys2的emacs中均可复现,且在gui和terminal下均可复现,同时更改字体无效,另外与emacs具体版本应该无关,因为使用相同的字体和环境,仅更改配置文件为Doom Emacs或者其他emacs发行版就可以正确显示,楼上所说关闭插件和更改indent-tabs-mode均无效

晚上装了个Manjaro的虚拟机,一样有这种问题,刚打开custom.el什么都不做的时候是对齐的,然后只是移动了一下光标,就变成了这样 屏幕截图 2023-08-27 194411 然后我就运行了C-h v随便查看了一个变量,按q退出后就变成了这样

然而这个文件用emacs -Q打开始终是对齐的

Centaur 不会自动改缩进,你的买哦数更像是贯标移动后没刷新。你可以尝试

  1. 用Windows原生Emacs版本测试
  2. 换consolas测试
  3. (remove-hook 'emacs-lisp-mode-hook (lambda () (setq-local lisp-indent-function #'my-lisp-indent-function)))
  4. 二分法查找问题

确实感觉是某种刷新问题,但是所有的emacs版本我都试过了,全都有这个问题,msys2安装的emacs就是原生emacs,我还测试了wsl2的emacs和全新安装的manjaro虚拟机的emacs,无一例外都有这个问题,各种字体也都试过了,包括带nerd和不带的,甚至terminal下的都尝试过,全都一样的,添加这个代码也没有任何区别,问题看起来并不是缩进的问题,而是显示的问题,因为缩进实际上并没有改变,但是显示的缩进是错误的,而且我也测试过,只有Centaur Emacs的配置有这个问题,无配置的Emacs还是诸如Doom Emacs的配置在各种系统的emacs中都显示正常,只能猜测是Centaur Emacs中的某些设置或者插件导致了这种问题,我在全新安装的虚拟机都能重现,应该是系统无关的,但是因为没有错误提示,我没办法知道是什么导致的

今天又测试了一下,是highlight-indent-guides-mode的问题,在各种系统的emacs版本中,只要关闭了这个mode,所有的缩进都会正常显示,而且C-M-\的格式化也能正常进行,上下移动光标产生的缩进异常等都解决了,我尝试修改了init-highlight.el中关于highlight-indent-guides的代码,发现只要highlight-indent-guides-method的值不是character,就不会产生各种缩进问题,接着我修改了highlight-indent-guides-character为?|,同样可以正常显示,甚至我换了一个跟默认值相似的?\xFFE8也是正常的,看其来是默认的值?\x2502存在某些问题

跟机器上安装的字体相关,unicode字符显示不一样

应该是跟某些字体设置有关,因为Windows、wsl和Manjaro的系统字体是完全不同的,然而都会出现这种问题,我尝试注释了Centaur Emacs中关于symbol、emoji和cjk字体相关的代码,同时也尝试了回退到使用all-the-icon而非nerd-icon的Centaur Emacs版本,问题都没有解决,然而奇怪的是设置使用相同字体的Doom Emacs添加indent-guides模块后也能正常显示,既然相同的字体Doom Emacs能正常显示没道理Centaur Emacs不能

注释了Centaur Emacs中所有字体设置的代码,问题仍然存在,然而看了一下Doom Emacs中doom-font的定义,和Centaur Emacs似乎没什么区别,尝试替换了highlight-indent-guides-character的值,发现似乎非Halfwidth的unicode符号都不能正常显示。然后我对比了一下Doom Emacs和Centaur Emacs中的一些差异,发现当minibuffer中有命令时,字符的高度似乎不同,这是Doom Emacs里面的 屏幕截图 2023-08-31 115735 这是Centaur Emacs里面的 屏幕截图 2023-08-31 120336 可以看到图中y和n的高度是不同的,这是否是导致两者行为不同的原因呢?