纠结半天, 从space emacs换成doom emacs, 整个世界清净了...

所以代码补全我直接用lsp-bridge

零配置只是临时 Debug 的时候用用的。我是肯定不会长时间使用零配置的Emacs,所以也就没必要安装 corfu,vertico 这些,虽然安装起来也很简单,直接复制官网的例子配置就行了。

Emacs 内置其实也有 icomplete-vertical-mode, 类似 vertico,只是没默认开启。我觉得目前默认没启动很多东西挺好的,如果默认启动了补全弹窗这些功能,用户想用别的还得一个个去关。因为不是所有用户都喜欢 vertico这种风格的,还有喜欢 ido 这种风格的。

哎,当年用emacs的时候还没有space emacs和doom emacs,纯粹凭借对于org-mode的热爱一点点地啃、从头开始配。当时没什么经验,不知道什么lazy load,能用就行,功能一个个往上糊,性能很是一般。

第一次看到space emacs动心了一下,尝试了下感觉有点臃肿,再加上我习惯原生按键+用org管理配置,space emacs还需要折腾一下才能符合我的习惯,就放弃了。

后来看到doom又心动了。我是那种主要想用emacs来做事,不太想在 emacs 本身上花费太多精力的那类用户。具体表现是,只要满足需求,不太想升级,也不太在意插件的性能效率。比如说completion插件,前有更简洁的ivy,后有新起之秀vertico据说代码设计更优秀,但我还是在用常被人吐槽臃肿的helm,因为我非常喜欢在各种candidate里加自定义动作,ivy还要考虑快捷键怎么设置合适,不会冲突等,helm直接往里加,搜索匹配就好:

自觉很难费神把emacs配成doom这种程度,需要什么功能就启用什么module在我看来也比space emacs的layer好理解,性能优化也不错,就花了几天把配置从vanilla迁移到doom了。

现在doom用了一阵子,说说我喜欢的地方:

  1. 有些小细节,比如一些界面美化啦,标识版本新增行啦,没有的话个人懒得花精力,因为对效率提升不大,但是doom帮你做了以后确实感觉更顺手。
  2. 内置了一些+开头的函数挺实用的,比如说让org-mode中的gif动起来,快速在当前git项目中全项目搜索,把选中内容复制为富文本等。之前要么没想到可以这么做,要么需要自己去搜方案。
  3. module + flag 在我看来是doom大大降低了使用新功能的门槛。它完成了两个工作:1、实现这个功能的最佳插件有哪些,2、这个功能还需要哪些基本配置。相当于帮人节省了一部分调研和配置的精力。比如说我看了一个视频才知道撤销功能还可以可视化!这个看上去很方便,在doom里就可以很轻松地启用undo-tree。后来发现undo-tree bug有点多,改用什么替代方案呢?doom已经写好了,直接禁用 +tree flag,就自动换成undo-fu+vendo的方案了
  4. doom 也是学习emacs和elisp的好资源。我有很多包都是从doom了解到的。

当然也有痛点,最大的痛点是,debug或加新功能的时候,不知该从何处入手。

我现在就卡在org-capture经常中断的问题,根据 Capture template 'X': Wrong type argument: stringp, nil · Issue #4832 · doomemacs/doomemacs · GitHub 发现是 (+org–restart-mode-h) 的问题,还有其他一些vanilla没问题但是相同配置放doom里就有问题的情况……可见封装在带来方便的同时,也会引入新的问题。

每当这个时候,我就有点纠结,是再多学习学习doom,还是再手配一套😂 @milanglacier 从doom 的配置重写一套自己可用的 emacs 配置有什么经验分享么?你感觉重写一套之后有什么得失?

9 个赞

还是建议再多用用 doom,至少再用个大几个月再说,至少要做到如果你想要抄 doom 的某一段配置,能够快速的定位配置以及搞清楚它的封装层级搞清楚大概要怎么解封装为止。我放弃 doom 的主要原因还是存在一些配置我实在是不知道该怎么 override 才决定重写。

得的好处我就不再过多的阐述了,核心就是个性化和更好的debug。

缺点我感觉第一点就是性价比/时间,如果你没有一个 dedicated 可以啥都不用干的1-2两周,不要去干这个,而且干这个一定要一气呵成,一定要一口气做一个把常用的基本功能都实现的版本,就是比如 evil vertico lsp 自动补全之类的东西都一次性配好的版本,后续的其他功能可以再慢慢加,但是这些基本功能不一次性配好,后续肯定就是会慢慢荒废掉,无限搁置。

此外 doom 的很多优化很复杂,很多代码都是很难直接抄过来的。我举一些例子,doom 的 dired 针对 BSD server 做了特别的优化, doom 的 org-mode 有很多特别的配置,比如重写了 org-return,重写了 org-indent, 还包括懒加载 org-babel 等等,此外还有优化的 lisp-indent 以及 emacs-lisp 的时候font-locking 等等。doom 针对 evil 也有很多自己的特殊优化。但是这些东西的话就是你不用的话就当不知道就好,比如我不用 BSD 我就不需要它对 BSD 的优化。有一些很好用的功能你就解一下它的封装层数、把代码抄过来就好,但是这些东西就是都得去读 doom 的源码然后慢慢抄过来。我也就是一开始配置的时候读了下抄了一些过来,后面也没有再去看它的源码抄配置了

4 个赞

spacemacs用了一个月就换了doom,到现在用了两年了,大多数情况下都是很满意的。 假如要我从零开始配置的话,除非真的可以在非工作时间把配置做到可以达到平时工作效率的7 8成,否则都是没动力搞的。真的像前面道友说的,得一口气配得差不多,不然很容易又放弃了。 当然这是我个人情况而已,不代表其他人。

2 个赞

可以用advice把引起问题的函数修正或去掉. 或者停止更新doomemacs,就以现有的版本建立自己的发行版. 我的配置是基于steve pucell修改的,使用一年后我就不从他配置更新,开始做我自己的定制.

再不济还有其他发行版可以用.

一样的路程,还是自己全局掌握配置比较舒心,即便出现问题也好定位排除。

之前也是用的doom大概用了1年,更换的原因主要是GFW,我一般2周更新一次,拉包太慢,经常中断。不得已就换成了自己的配置,慢慢从各种地方抄一点,大概断断续续弄了1个月,终于有个功能比较满意的配置。应用场景一般是用org-roam写写笔记,工作时候写写 java 代码。

1 个赞

我还好,蹭公司商用的VPN,基本不会遇到问题,在家自己挂飞机倒是有时候会失败。

其实总结一下自己最需要的功能就 工作区分开,evil,ivy,magit,projectile,general,lsp-mode,multicusor,其他好像都不太重要。

老哥分享一下配置,我瞧瞧能不能看懂一点。

我也是用这几个包,lsp是用的懒猫的lsp-bridge,用了gitsubmodule管理包。

那你写 Java debug 之类的用什么?

配置弄到最后的终点就是,自己攒一个适合自己的 :grinning:

这边是微服务架构,部署到测试环境打日志看,不用本地运行

1 个赞

誰一開始就會燒菜? :thinking:

那你為什麼用 Emacs? 竟然你想要別人配置好的; 那有很多選擇. 選擇 Emacs 不就是可以自己客製化嗎? 如果你不願意自己寫, 用別人寫的, 那有比其他編輯器/ IDE 好用嗎? 如果你使用一個工具連工具本身的用途/強項是什麼, 那不是很好笑嗎? :joy: 你會拿瓦土機煮飯嗎?

我也時常搞不懂為什麼有人用 Emacs, 還要用別人配好的 (初學者學習用除外). 既然選擇 Emacs, 不就是要自己客製化嗎? 那既然選擇不客製化, 那為什麼選 Emacs? 畢竟其他有太多好用開箱即用的編輯器和 IDE. 除非你 100% 喜歡別人客製化後的配置, 但基本上不可能, 所以才要自己造輪子 (當然你也可以等別人寫 :stuck_out_tongue: ).

不過最終還是回到你開心就好! :+1:

5 个赞

我当时选 Emacs 就是因为没得别的选,用 Xcode 写 lua 怎么都觉得不对,于是百度最强的编辑器出来的是 Vim 就用上了。然后 IRC 有个没用过 Spacemacs 的 Android Emacs 用户给我推荐了 Spacemacs

用Emacs就是需要定制化,来和自己适配。

配置从全部自己DIY到用成熟的配置,这中间因不同的能力水平,不同的需求,不同精力投入。大家会选择不同的程度上的定制。不是非此即彼的选择。

一开始有兴趣也有时间瞎折腾,自己就一边配一边问一边学。对emacs也了解了不少。emacs的东西太多,开发活跃,一个人折腾不过来,没有太多时间。那就用doom,用一帮人持续不断的更新维护的配置,这样你可以快速使用和了解emacs不断增长的新的功能或你不了解的功能和用法。用的不习惯的自己就改改,部分的定制就可以。这样把更多的精力放在问题和工作本身上,而非工具上。我觉得这样挺好。主打和自己适度就好。不用太纠结。

2 个赞

完全同意,紫薯布丁

基于具半编译特性的 elisp 编程语言的 Emacs, 其定制,实用,适配需要一定的系统与方法学来支撑。举个栗子: GPE

使用是自上往下的,配置是自下往上的。适配是不断往下提取共性,不断往上按需扩展,之间要不断实现解耦。这个表达法益于整合,给主要配置文件分组编个序列,还方便调试:

6 个赞

了解! 我是不知道 macOS 環境. :thinking: Windows 應該是有幾個我覺得挺不錯的! 不過這個太主觀了; 我也不確定怎樣的 UX 符合你的需求.

@milanglacier @redguardtoo 感谢二位如此中肯的建议,让我更清楚自己的情况!

我还是决定继续使用doom,以我的水平,doom还有得学习。我很赞同这位朋友所说:

回想一下,我确实从doom学到了很多。比如正是doom让我有了强烈的版本管理意识😂,之前做的只不过是同步;让我知道宏的使用、懒加载等等。现在不过是遇到了问题,有些畏难,抱着这样的心态就算自己来配,也会遇到问题的吧。

而我觉得头疼的封装,或许正是为了抽象成比较通用的框架而写的胶水代码?

至于这位朋友问:

我觉得由于丰富的插件系统,emacs的用户是非常多元的。比如有人是看重它的笔记+latex导出+文献管理进行科研,这种需求只有在emacs并进行些许配置才能实现,没有其他同等选择。且这类用户也未必想投入很大精力在emacs配置。

总结一下我现在的想法:

  1. 不要把emacs作为第一个IDE/笔记管理工具/…… 第一个工具一定要能快速上手干活。Emacs太复杂,不能快速上手。而且经历了第一个,才更清楚自己想要什么,是否要选择Emacs。
  2. 如果要上手emacs,对于大多数人来说 starter kits是更优解。开箱即用,快速体会到 Emacs 能做到什么。当年toughtworks 还把 Spacemacs 列入技术雷达 https://www.thoughtworks.com/en-de/radar/tools/spacemacs,可见此类starter kits对于新手很有吸引力,对于推广emacs平台大有帮助。
  3. 用一段时间,更了解自己的需求、能力,再决定是在starter kits上修修补补,还是另起炉灶。反正emacs可以很方便的支持多套配置。 正如这位朋友所言:
5 个赞