大家对于Lisp语言中的Tab缩进怎么看

起因是这样的,我写了一个这样的玩具插件:

(是这个块状颜色背景喵,语法高亮是我的另一个插件)

我想把它的复杂度从O(n^2)降到O(n),同时降低计算资源消耗,可这样就必须强制把每行行首的Tab缩进全部换成空格。Emacs对Lisp的缩进是Tab+空格混合缩进,不到tab-width的部分才用空格,而别的Lisp编辑器大多使用纯空格(Racket,Lem,LispWorks等)。想知道大家对Lisp缩进方式的偏好如何

我个人是喜欢纯空格一些,翻看Emacs源码的时候tab-width不停地变、让代码显示混乱也搞得我很烦

如果大家普遍喜欢Tab+空格混合的话上面那个插件我就不继续写了也,毕竟大量带有 propertized string 的 display / after-string overlay对Emacs来说着实吃不消orz

  • Tab + 空格混合
  • 纯空格
  • 随便哪个,能看就行
0 投票人

顺眼是次要的,一旦包含tab的patch进了项目,就不能自动展开空格了,diff的时候还得开whitespace-mode。

顺眼是次要的,一旦包含tab的patch进了项目,就不能自动展开空格了,diff的时候还得开whitespace-mode。

1 个赞

应该只有 legacy code 是 tab space 混用的吧?新的代码应该都是纯空格。

1 个赞

indent-tabs-mode 默认是启用的。当然,大部分人应该都在创建自己配置的时候关了

2 个赞

我之前在 Reddit 上发过一个类似的帖子:

https://www.reddit.com/r/emacs/comments/1d3f5a7/do_you_use_tab_or_space_for_indenting_emacs_lisp/

最后也没啥结论 :joy:

大部分人倾向于 (setq-default indent-tabs-mode nil)

P.S. 我个人还是保持默认值。因为提交 patch 给社区,最好还是服从 Emacs Coding-Conventions,否则整片代码会乱掉。

Indent the file using the default indentation parameters.

1 个赞

我觉得像 linux-c 或者 go 那样纯用 tab,或者脚本语言通常更倾向的纯用空格,都是可以的。我其实更倾向于纯用 tab。

但是 tab 和 空格混用我实在是接受不了。。。legacy code 如果已经是这个风格了,那肯定就不要改了。但是新的 project 最好别搞混用这种操作。

当然纯用 tab 的前提是,该语言的格式化风格是换行时就逐层缩进,不要求对齐,而不是换行时要对齐。lisp 这种倾向于对齐缩进的风格是没办法纯用 tab 的。