萌新入坑,想要请教一些使用上的问题

严格来说,lisp 不算纯函数式编程,我们还是不要迷恋“纯粹”了。。。。

没有用过这个配置,也许你可以问一下配置作者 @seagle0128

Windows 上启动用时几秒钟是家常便饭,我自己的配置在 Linux 下启动能快一倍。

2 个赞

用wsl2不应该这么慢,如果使用TUI很快的。你的笔记本是有多老?正常Windows下也就5、6秒。最近对Windows平台做了一些优化,但是本质还是IO问题比Linux/macOS慢。

1 个赞

他们有的说 emacs lisp 不太函数式的,也看你的需求。如果你追求的是完全没有副作用,即,纯函数编程,那 emacs lisp 做不到。如果你追求使用函数式思维,那可以。

首先并非 emacs lisp 本身写不了函数式,现代 emacs lisp 可以写得非常函数式,可以没有全局变量,可以没有修改变量值,只用参数传递的方式状态演进。要使用尾递归,需要用 cl-lib,而且不是总能完全优化,致使高性能代码仍需要使用循环。即使如此,个人配置或者自己写的小命令小函数依然可以完全使用递归。没关系的,只要不爆栈就可以。自己用,而且即使慢也感受不到,对于人来说没有差别,有什么问题呢?

而诸如 insert 之类的函数,往编辑器缓存区输入字符的,则完全不能纯函数,这也是 emacs lisp 不能写纯函数的一重要原因。

不过写函数式代码——尽可能用递归,用 map(car)/cl-reduce 之类的组合代码,少修改或者完全不要修改变量,什么的都可以。最开始 lisp 也是这样的,不追求完全纯函数。

总之,反正是自己用,写得开心,用得开心就好。emacs lisp 本身是多范式的,当然可以函数式。

另外,一点点题外话:有没有考虑找个时间选个心怡的图片作为论坛头像?

2 个赞

m$win 上使用 emacs 我没有经验,只在 cygwin 中用过,但没有装任何插件

喜欢折腾,建议同时将切换到 linux 折腾折腾

1 个赞

wsl2操作windows的文件,或者windows操作wsl2的文件,性能都很一般,可以是可以。你要是目的就是用windows excel打开wsl2里的xlsx,或者用windows的浏览器打开个wsl里的网页这种,那文件性能不会有啥大影响。你别整什么跨文件系统编译项目之类的就行。

建议wsl2里的直接操作wsl2文件,文件性能挺好的、和原生的差异不大。

1 个赞

如果你要用 TUI 的 Emacs 那么 WSL2 可以接受;GUI 的话,WSLg 窗口化似乎没做好,无法快速最大化窗口,只能手动用鼠标拖动边框来调整尺寸。

Win11 LTSC + WSL2 用了大半年,终于还是回到 Linux 了。

是首次打开还是每次打开都是这个速度? 首次打开的话可能会有 native-compile 编译拖慢, 或者是有 elpa 包下载的网络延迟 (注: 具体问题需要结合配置来看, 没用过不清楚)

假如是比较成熟的配置, 一般都设置有许多开关可以用来自定义, 也可以让 AI 帮你读和分析, 现在 AI 找 Emacs 函数还是很方便的, 然后配合 Emacs C-h f 哪里不会点哪里, 可以通过读代码的方式来学配置.

每次打开都要这个时间,但是没关系,目前不打算用发行版了,感觉直接用别人的比一步步入门难度还要更高,直接面临的信息量有点太大了。

这两天配合ai和大佬的配置,东抄抄西抄抄,已经弄了一个比较轻量的配置,完全配好后再到这台旧电脑试试看。

1 个赞

有时间且不着急某事的话,自己攒配置当然是最好的,后期也比较容易维护和扩展

1 个赞

新配的配置在比较新电脑的window的wsl上还需要2.1s,刚刚在旧电脑(纯linux)上试了一下1.7s就开了。看来应该不是旧电脑不行了,而是 centaur 可能确实还是不够轻量。

看了下 centaur 的代码, 理论上如果愿意调试的话可以先用 init-mini.el 试试启动速度, 然后是在 init.el 里面去掉不必要的 require (比如可以通过二分法注释来判断具体是哪个模块变慢了).

或者可以抄懒猫的配置, 写一个 (run-with-idle-timer sec nil (lambda () (require 'delayed-init))) 把不需要的模块推迟加载, 这样就能获得一个飞快的启动速度 (注: sec 设置太长会导致模块没有按照期望进行加载, 太短会卡启动时间).

不过一般攒配置是看到别人的某个配置写得很好, 抄了, 过了一段时间没用忘了, 久了之后就会开始打算重新清理配置了 www

1 个赞

如果Windows上显示还是5s左右的话,大概率还是读取的Windows文件,不是wsl2中的文件。

直接配置为启动最大化不就可以了(push '(fullscreen . maximized) default-frame-alist)

感谢分享。我目前已经不用 WSL2 了,没办法测试这种方法;不过对我来说最大的问题还是它不支持快速调整窗口化,例如有时需要让 Emacs 切换到别的屏幕,或者只占据一半屏幕。 (不过,说不定借助 Powertoys 也能做到?我不确定,也没条件测试了。)

用elisp就能实现此类需求,全平台通用。

1 个赞

最大的限制还是来自 WSLg 本身。

实际上除了不能拖标题栏来快速分屏以外,我遇到的是与上面的 issue 类似的问题,具体忘记了,似乎是多显示屏不同缩放率会导致应用无法识别正确的屏幕分辨率,从而在最大化时超出边界。

直接windows版就可以了, 性能问题有人说过, 主要是因为很多包的开发者使用的是linux, 就没有专门对windows进行优化,只是让它能在windows上能启动起来就好. 包括那些成熟的配置

如果自己写配置, 仅针对自己使用的环境进行优化, 就基本没有性能问题了

2 个赞