这是一个困扰了很久的问题。
- Emacs版本:Windows下的25.3.1版本
- 问题描述:使用
M-w
快捷键(即kill-ring-save
函数)复制buffer中的文本,如果文本带中文,则粘贴到其他地方后发现会带一个\ufeff
的空白字符(即BOM前缀);如果文本不带中文,则不会添加BOM前缀。期望是:不管复制的是中文还是英文,都不要带BOM前缀。 - 尝试解决:
- 尝试方案1:修改buffer的文本编码为
without-signature
(即不带BOM签名)的编码。 - 尝试方案2:查看
kill-ring-save
源码发现,会调用kill-new
函数,kill-new
接收一个字符串参数,这个字符串就是从buffer复制的文本字符串,于是想写一个advice,强行把字符串中的\ufeff
替换为空字符串,写的advice如下:
- 尝试方案1:修改buffer的文本编码为
(advice-add 'kill-new
:around
(lambda (orig-func &rest args)
(setq str (car args))
(setq replaced-str (replace-in-string str "\ufeff" ""))
(apply orig-func (list replaced-str))
'((name . "around@kill-new"))))
但是上面两个方案都没有解决问题,不知道还有什么解决方案,求助各位,感谢!