想从 neovim 转 emacs,有什么建议?

neovim 的轻度用户,最近想转用 emacs,原因如下,寻求各位建议。

1、lua 让我难受,动态类型语言,还不会调试。使用 neovim 也主要依赖于 astronvim 这种发行版,它自身已经进行了各种预配置,但使用这类编辑器的真正的需求就是追求定制化。要在 astronvim 的基础上进行定制,感觉需要看好多 lua 代码,很难受;如果不基于 astronvim 进行定制,而是自己配置,又感觉需要配置很多插件,光看看 astronvim 预配置的插件数量就头皮发麻,工作量太大。

emacs 是否能解决我的痛点,或者说 elisp 是一种怎样的语言?简单看过一点教程,看起来是很函数式,这是否不容易出错?是否方便调试?

2、被 zsh 惯坏的我,看着 powershell 就烦,主要是 powershell 缺少历史命令搜索功能,比如我 ls /some/path/to,我就是记不住这个路径,那么我就希望 shell 能给我补全,zsh 可以做到,powershell 貌似是做不到。

(补充说明一下,这里提到“历史命令搜索”不准确,powershell 也能搜索,但无法根据键入的前缀内容进行补全,比如我输入 ls 我就想从历史命令中找到前缀为 ls 的所有命令,但 powershell 会告诉我所有历史命令,这很难受)

那么 emacs 能否解决这个问题?充当一个跨平台的,功能完备的 shell ?

那完了, ELisp 也是. 不过 ELisp 的调试体验非常舒适! 常见的功能比如 debug-on-error, debug-on-quit, 还有 edebug 可以一个表达式一个表达式地步进, 每次查看一个表达式的值, 诸如此类

没仔细看你的需求, 不过毫无疑问 Emacs 是可以实现的, 最差也不过就是你自己写个 Lisp 函数.

  1. 我觉得vim和emacs如果想用的顺心得手都是需要自己花大量时间去配置的, emacs也同样有doom, spacemacs的发行版,所以你想要的开箱即用是不可能的.elisp也是动态语言,只不过更加的灵活.
  2. 我不太明白emacs和shell有什么关系

neovim 轻度用户?那为什么定制要看底层代码?如果你觉得 astrovim 太重就换别的。

emacs 不是更复杂吗?doom emacs 和 spacemacs 比主流 neovim 分支都重。

powershll?和 shell 有什么关系?如果 powershell 要补全可以看看 PSReadline 之类的。

1 个赞

emacs更复杂,而且emacs不如neovim快 但是emacs可以做neovim做不到的事情,例如完整的笔记 org kode 浏览器 gui 邮件 等功能 而且emacs比neovim要复杂 看你个人取舍,emacs的入门曲线其实比neovim要曲折得多 尤其是用过neovim然后初次接触emacs会有更多的不适感(按键不用),但有evil(我自己不使用这个)

不能,emacs 好像也不适合作为 shell 的替代品。还是用 专业的终端软件吧,比如 wezterm, alacritty, kitty 等等。

你说的都是终端模拟器,不是 shell :joy:

可以尝试 eshell,是用 elisp 实现的 shell,跨平台且可定制性比较强。

但是我还是觉得现在流行的 shell 功能已经很完备,社区也很强大了,用 eshell 是体会不到这些便利的。用过一段时间 eshell,最后还是老老实实用 vterm + zsh 了。

1 个赞

其实我一直想吐槽这个 gui,如果非要用 gui,为什么不用 vscode ?我认为只有不愿意使用 gui 的情况下才会考虑 neovim 或 emacs。为什么不愿意使用 gui?因为不可定制,比如我就是要在调试时把各个窗口按照自己想要的方式摆放(或隐藏),gui 就不给留接口。

还有【完整的笔记 org】,很多人都说这个,但我个人记笔记都是使用 typora/obsidian,不知道 org 和 typora/obsidian 有什么差异?

【而且emacs不如neovim快】我用 spacemacs 默认配置,第一次打开 emacs,肯定要下载一些插件,但后续打开 emacs 总是会告诉我下载 4 个插件?是我网不好?这四个家伙下不下来?我开代理来着。还是 spacemacs 默认配置有问题啊? 进入 emacs 之后,随便编辑一点 C++ 代码,想要跳转到头文件中,无论是 gd 还是 ctrl+],都是直接卡死了……

  1. lua 不错了,好歹是现代语言。而且 neovim 的开箱即用已经做得很好了吧, emacs 连配置到勉强能用都很麻烦,emacs 的社区配置可是大到连启动都要几十 秒,自己配置的工作量比 neovim 要大多了。

  2. emacs 有内置的纯 elisp 实现的 eshell,和 emacs 的集成非常好,补全、 搜索、跳转、编辑的姿势非常多,缺点是纯文本终端不支持 tui 应用,不要求 tui 的话就是最好用的终端。

关于补充说明,emacs 的 minibuffer、eshell 和其它基于 comint 的 shell(sh、python 等)内置的历史命令搜索都是这个逻辑。 emacs 的搜索框 架(helm 或 ivy)都能实现类似 fzf 的效果。

我没用过spacemacs

当你问出非要用gui为什么不用vscode时就证明,你目前并不需要emacs,那就没必要真的去用emacs,emacs并不完美,仅仅是gui的定制性高(你说的那个调试需求emacs可以实现,emacs还能记住当前布局,然后在未来某个时刻恢复呢)

完整的笔记,我只是用不习惯typora和obsidian而已,差异不太了解,我没深入使用过这两个笔记软件

1 个赞

zsh 肯定好用啊,powershell 不好用。比如我敲了非常多命令,当我想要找一个历史命令的时候,zsh 可以通过输入部分前缀来缩小查找范围,但 powershell 只能通过上下键挨个历史记录翻。

而且大家都是熟悉 linux 命令行的,没有多少人专门学 powershell 脚本怎么写,搞不懂微软为什么不向 bash/zsh 脚本看齐,非得搞 DSL。

我甚至都想自己写一个简易 shell,把 linux 上的操作习惯搬到 windows 上。

再具体回复一下你的两个点:

  1. 你已经在使用astronvim了,在框架的基础上再定制存在两个问题,一是框架本身的限制,二是你需要额外学习框架本身的设计思路或者代码。这个情况到emacs只会更严重

  2. emacs并不能解决shell的问题,即使有eshell,我也只是偶尔用用,多数用的时powershell(我是windows用户)

所以综上,你的痛点目前emacs并不能解决

1 个赞

好吧……看来不行了。

我感觉 bash 还是能实现 zsh 的很多功能的(虽然扩展性稍逊于 zsh),如果一定要在 Windows 上,不妨试试 Git Bash?或者干脆安装 WSL,这样就能全套搬运 Linux 上的操作习惯了。

powershell 有插件可以像zsh-autosuggest一样显示补全,还可以集成fzf。你没仔细研究过吧,可以搜搜。

其实zsh的历史补全新版powershell可以用内置的PS-Readline做到,在配置文件加下面这个代码就行。

Set-PSReadLineOption -PredictionSource History
1 个赞

我喜欢emacs的最根本原因还是elisp, 动态,灵活,有什么想法随时随地调整,写起来比vimscript和lua爽很多,缺点就是生态比vim差多了,那就看你使用环境要求高不高了

1 个赞

我试了,需要更新 powershell,不过总归好使了,感谢。

由于历史原因,单从语言来说,elisp 要比 lua 混乱。但是,作为编辑器配置语言,它比 lua 要好。主要原因是有一系列的工具来帮助你 debug,以及不修改别人的代码,也可以覆盖修改其行为。所以我觉得 elisp 可以解决你的痛点。

第二个问题,能也不能。

首先说 eshell,它确实可以作为一个跨平台的完备的 shell,但是,你想要得心应手且有跨平台一致行为,需要投入很多很多时间精力在这个上面。所以它没办法在短期内决你的问题。

但是,我们更倾向于直接在 emacs 里做,而不是开一个终端跑原始的 shell 命令。比如你想要列出最近访问的目录/文件,有很多方式列出并搜索历史记录。绝大多数日常操作你都不需要直接和 shell 打交道。所以 emacs 是可以作为一个跨平台工具来覆盖 shell 的功能,只不过是用不同的方式。