spacemacs 的 tab和空格问题

用了@子龙山人的配置,用spacemacs 保存退出的时候,默认会把整个代码tab转成空格,这样直接git add和git commit后,会有大量的修改,并且改变了原有的代码格式,请问下有什么方法解决吗?

(setq-default indent-tabs-mode t)

另外可以用 tabify 和 untabify 转换当前文件的空格和制表符。

1 个赞

我这个已经改成了 t, 用 tabify了之后,保存也是这样,貌似只是对cc mode 有效 ,我自己创建一个1.txt 就没有问题。

@guanghui.qu 麻烦帮忙看下, 这个问题困扰了我很久, 就是保存的时候,代码会把tab转换成空格进行保存。

我的电脑环境是ubuntu 14.04,然后emacs是25.2.1

第一次变成空格了,以后不就是一直是空格了? 用空格挺好的

你看看文件保存时的hook吧。

我也喜欢用空格,但是公司项目linux 内核代码 用的tab,我每次提交代码,改了一两行,git diff 有大片代码,已经被吐槽了,不利于同事定位问题。

可以了解下 ethan-wspace 附上我的配置作参考 vmacs/conf-space-tab.el at master · jixiuf/vmacs · GitHub

ethan-wspace是用来处理 空格及TAB 相应的问题的 它的 特点是 “无害” “do not harm” 有些脚本 提供了自动trim 掉行尾的空格有功能 ,但是在进行diff操作时,会多出不必要的diff ethan-wspace 当你打开一个已存在的文件时

  1. 如果文件中的whitespace 已经都clean 掉了,则它会 在每次保存前进行一个clean ,确保无whitespace
  2. 如果没有,ethan-wspace 高度显示 errors,它不会自动改动这些errors ,但是它会阻止添加新的errors

ethan-wspace 把以下几种情况定义为errors:

  1. 行尾空格, trailing whitespace at end of line (eol).
  2. 文末没有一个空行 no trailing newline (no-nl-eof).
  3. 文末有多个空行 more than one trailing newline (many-nls-eof).
  4. TAB

如果你不想让TAB成为一种error 可以 (set-default 'ethan-wspace-errors (remove 'tabs ethan-wspace-errors))

去掉 Ws-Butler package,同时修改 .spacemacs,把

   ;; Delete whitespace while saving buffer. Possible values are `all'
   ;; to aggressively delete empty line and long sequences of whitespace,
   ;; `trailing' to delete only the whitespace at end of lines, `changed'to
   ;; delete only whitespace for changed lines or `nil' to disable cleanup.
   ;; (default nil)

   dotspacemacs-whitespace-cleanup 'changed

修改成 nil

只是吐槽而已,多么温和的同事啊。

子龙的配置可以说是比较精简了,其实你搜一下 whitespace 也能发现问题:spacemacs-private/init.el at 08f928f29ac80e2fb58146c627b03266cdea6e06 · zilongshanren/spacemacs-private · GitHub

如果你觉得这个设置比较习惯/合理,但是某个项目情况比较特殊,可以不用修改 emacs 配置,而是通过 .dir-locals.elEditorConfig 来切换。

请问这个问题怎么解决的。我是ubuntu 20.04 + eamcs26.03,用的 子龙山人的配置。如果有知道的,还请告知。谢谢

如果不想要这个行为,可以去掉 Ws-Butler package, 并且把 dotspacemacs-whitespace-cleanup 改成 nil

你好. 我去掉了ws-butler 同时也设置了dotspacemacs-whitespace-cleanup nil 还是会将tab转换成space

如果我注释掉这个配置,就能正常保存,但是无法自动补全,是yasnippet这个引起的吗?

感觉跟这个snippet 应该无关,不知道是不是引发了别的hook

现在只能先牺牲自动补全