- 我在 Emacs 里设置了在保存时自动删除行尾空格
- 有些代码包含大量行尾空格
- 我在上述代码文件里哪怕只做很小的改动,只要一保存,便会生成大量的空格改动
- 我希望在提交代码时,忽略空格改动,只保留核心改动
稍微搜索了一下,我发现要使用 git 命令行实现上述目标,不是很容易,但使用 magit 就容易多了。步骤如下:
- 正常打开 magit-status,默认按键
C-x g
- 按
D
(magit-diff-refresh
),然后按 -w
,激活 --ignore-all-space
- 按
g
刷新
这时,magit-status buffer 里已经隐藏了所有空格改动,放心地 add 和 commit 就好了。
1 个赞
建议去掉自动删除,改成使用 ws-butler-mode ,这样可以只删除自己修改或者新写的空格。
多人协作时候,最好少动别人的代码,省得麻烦。。。
1 个赞
第一次知道 ws-butler-mode,已经取代了 delete-trailing-whitespace
。感谢推荐!
ws-butler-mode 的原理是啥?能分享下不?
yqu212
5
这种方法有时候会导致git stage失败,到时只要关闭–ignore-all-space就行了。
没太细致看过,大体上是在文本发生修改时候给发生修改的行加上个 ws-butler-chg 的 property, 然后保
存之前遍历带有 ws-butler-chg 属性的行,逐行修正 tab, space 和行尾空格。
1 个赞
也就是说这个模块配合 auto-save 类似的插件, 可以实现自动保存, 但是仅保存用户真正动过的行?
说到行尾空格。能在写代码的时候,让他不生成行尾空格么?
我这里有个奇怪的现象。编辑代码的时候,比如我copy了一行,粘贴后,按C-e。光标就会跳到行尾+几个空格的位置,也就是说在行尾添加了好几个空格。
此时,一按回车进入新行,上面那行的行尾空格就没了。
如果这是没有回车进入新行。这一行的行尾空格就会持续存在。
感觉貌似和自动格式化有点关系。但不知道是什么选项在影响。
Roife
12
通常来说不应该会有这种情况,建议用 Emacs -Q
测试一下。如果没有,说明是某处配置导致了问题,建议二分 init.el
调试一下
LdBeth
13
大概率是你复制的那行代码本身就有行尾空格。开 whitespace-mode 检查一下。
复制的没有。我怀疑是indent功能导致的。但是还没找到啥地方。