不谈Spacemacs,只谈Centaur Emacs

他的意思是开启mode吧

开启mode……好吧我语文没人教……

我直接用了之前的配置,load-theme和其他一些设置写到了一个函数里,我明天再拆开试试吧。

general 用过,后来我感觉自己在evil下废操作太多,跟evil一并删去了,没再重新绑定。

我确实是为了disable那个mode,用nil是因为在doom下可以生效,我沿用过来了。说实话,我不是太能分清nil和-1的区别……

谢谢各位!

xxx-mode

  1. 交互(interactively)调用:开关(toggle)还可以传prefix argument,正数开启,负数或0关闭
  2. 代码里(xxx-mode nil) / (xxx-mode):开启
  3. 代码里(xxx-mode 正数):开启
  4. 代码里(xxx-mode 负数或0):关闭

一般代码里开启xxx-mode就不传参数,关闭就传-1

3 个赞

回来看到大家这么热烈的讨论。这样的技术讨论是很让人欣喜的,而不像某些帖子里的放飞自我的互怼、互喷。

很感谢大家喜欢自己的作品。其实回想当初分享 Centaur Emacs 出来也是因为同事的鼓励和需求。之前我其实是一直用 VIM 的,大概4-5年吧,然后发现不够用(当时主要是因为调试 C 的问题),入了 Emacs 的坑。因为工作需求在 Windows、Linux、嵌入式之间都有涉及,需要在 GUI 和 Terminal 都能用。这些配置是个人用了十多年不断演进而来的,主要还是为了个人需求。看看我的 repo 名就知道,当时连个名字都没有想过,直接用的.emacs.d。然后有同事看到了拿过去用说效果不错,又提了一些需求。一直以来还是比较坚持自己的目标,简洁快速,在功能和速度中尽量找到一个平衡点,让 Emacs 这个老古董看起来没有那么呆板。这也是个人的哲学思想之一吧。类似的,doom-modeline也用了同样的思想在开发和维护。

要说真的是通用配置,我个人也是不大同意的。比如以前我的配置是使用ido的,后来又用了 anything,然后被helm代替,后来又试用了ivy。之后很长一段时间保留了ido, helmivy,用配置让用户自己选。类似的选项还有auto-comepletecompany。跟spacemacs很像(虽然当时我根本不知道这东东~~~),保留了多个选项用户选择。但是,试用了一段时间后,我决定只保留ivycompany,这是个人的选择,没有跟用户有过多的商量。因为保留其他的并不符合个人的哲学,这里就没有采取民主方式,只能请大家原谅。目前还有几个选项留给用户,个人是认为比较必要的,有些冗余的也许在不久的将来就会删掉,比如:centaur-lsp,目前保留lsp-mode, eglotnil三个选项。等成熟了我只会保留一个,并去掉所有非 lsp 的配置。这应该是目前的发展趋势,在过渡时期还会保留多个给大家使用。

对于大家比较个性化的配置,个人建议放到custom.el或者custom-post.el。一些配置包括通过customize UI 设置的都放到custom.el,它加载比较早;需要后续加载覆盖默认设置的放到custom-post.el,它会在最后加载。但是如果你足够熟悉 elisp,都放到custom.el也是没有问题的。比如我个人为了调试方便,很多时候都是顺手放到custom.el,用eval-after-loadhook之类的控制加载时机。

对于玩 Emacs 的来说,个人有个假设,用户都是比较小众追求技术完美的人群。可能有所偏差吧,但是不是对技术有那么一点追求的也犯不着来用 Emacs,直接用 Sublime Text、VSCode ,甚至 IDE就好了,那些都是现成的,对吧?那么既然入了 Emacs 大坑,必然对于上论坛提问、读写文档应该都有一定的经验。也许我的想法不够成熟,但算是自己的期望吧。每个开源作者肯定不希望用户都来问一些最初级最低级的毫无意义的问题,读 README、FAQ 算是最最基本的了,否则很多开源项目就用不着提供文档了。日常工作中应该也是类似的情况。你应该会遇到某个大拿听到很多低级问题大发雷霆的场景吧。当然,我在这里真的没有埋怨某个人的意思,只是就事论事。如果一时疏忽没有看到其实没关系,但不能一直问最低级的问题,尤其随便搜索一下、读一下文档就有的答案,那样真的很恼火。我个人会在力所能及的范围内回答问题,如果有没有能帮助到的也请谅解。我也希望在论坛中学习到更多更好玩的东东。

9 个赞
  1. global-set-keybind-key都可以重新绑定键位,我猜测你没有放到custom-post.el中所以没有生效。
  2. 设置主题一般用load-theme就足够了,另外还有一个更便捷的counsel-load-theme。在 Centaur 中,只需要设置centaur-theme为要加载的主题名即可。当然,如果不是 Centaur 提供的 theme包就需要自行安装。
  3. 如果要 disable请用(display-line-numbers-mode -1)
  4. 同#1, 估计是加载时机不对。
  5. 请升级doom-modeline。或者(setq doom-modeline-github nil)
  6. 字体对齐 Centaur 没有过多考虑,因为可能用户会使用不同的字体和字号。主要还是中文字体的设置调整,可以参考cnfonts。记得是@tumashu 兄的作品,我也用了很长时间。后来因为不兼容all-the-icons和过于笨重的原因没有使用。这个你请教@tumashu大佬可能更有收获。

最后建议能把个人配置的文件单列出来,我是(setq custom-file (expand-file-name "~/.centaur/init.el")) 到另一路径然后用git管理的,不知道这个思路对不对?

上面已经回复了, 对于大家比较个性化的配置,个人建议放到 custom.el 或者 custom-post.el 。一些配置包括通过customize UI 设置的都放到 custom.el ,它加载比较早;需要后续加载覆盖默认设置的放到 custom-post.el ,它会在最后加载。如果需要自行管理可以将这两个文件 link 过来,达到个性配置和平台框架分离的目的。

感觉实际花费要比centaur提示的加载时间更长。

启动时间是 Emacs 内部自动计算的,after-init time没有包含在内。因为有些 lazy loading,实际 UI 能使用的时间略微要长一点,在我的环境中大概是2-3秒左右,显示时间在2秒内。如果还要恢复之前打开的 buffer,那时间就会更长。

希望上述回到有所帮助!

这话一半同意一半不同意。对于大众产品也就是所谓的 consumer product,这点是对的。但 Emacs 本身就不符合大众一说。给技术人员用的和普通大众的标准应该有所不同。举个例子,做手机 APP 和5G 系统就有很大的差别,因为面向的客户差别太大。对于手机 APP 的用户,可以想象成那种“没有什么知识和耐心,还爱随便乱折腾”的生物,但电信运营商就不应该是这样的。其实也就是你后边提到的目标用户群不同。也许举例不一定恰当,但应该能表达清楚我的观点了。

对,所以我才提到“真·大众”这个词。这里就包含了技术人员和刚入门的学生或者只是有兴趣的普通人。

所以我才认为做Emacs配置也得提前想好你要面对什么用户……

1 个赞

非常感谢!

我刚开始还疑惑,custom.elcustom-post.el的区别到底是什么。

看来我需要重新思考一下我个人设置的组织方式,这几个问题可能主要原因还是加载早晚的问题。


实际验证:

跟UI有关的要放到custom.elconpany-english-helper这种要放到custom-post.el,确实跟加载时间有很大关系。

不过做一个配置生成器可能是一个好主意

我的配置,有几处放在别的文件里,在custom(-post).el中调用,有的生效有的不然,一下午也没弄明白,干脆都放一起,就都能运行了。

问题基本都已解决,之前报错最主要的应该还在于加载时间先后。感谢 @seagle0128 的回复!

唯一没有解决的是(display-line-numbers-mode -1)依然不生效。

另外想问一下,默认没有安装但elpa上有的包,推荐以哪种方式安装?我的意思是类似spacemacs那种简便的方式。

谢谢!

spacemacs->doom->centaur emacs 哈哈

晒一下自己的配置,参考了很多Centaur Emacs和Spacemacs ,感谢论坛里的各位大佬,还是自己折腾比较顺手,生命不息,折腾不止,哈哈!

(add-hook 'prog-mode-hook (lambda() (display-line-numbers-mode -1)))

安装包用use-pcakage.

1 个赞

生成器是好东西,但是也可能把简单的事情搞复杂。

在Linux环境中,emacs的term里执行fish有点问题,不知有解决的办法没?(arch和ubuntun都有这个问题,Mac下没问题)

每次执行完命令,都会输出一行

[] ]0;fish  /home/guodong/.emacs.d.customize

试试这个。还不行就改 fish 主题。

(setq system-uses-terminfo nil)

这样也不行,我试着改主题吧

问题解决了,在本地config.fish中,加入 function fish_title; end。禁止title的内容就可以了

有个问题不太明白

(add-hook 'prog-mode-hook (lambda() (display-line-numbers-mode -1)))

这段代码写在custom.el里有效,而写在custom-post.el里无效。custom-post.el是最后执行,应该可以覆盖前面的设置呀。难道custom-post.el是after-init-hook执行,在这个时机之后就覆盖不了前面的设定了?