从 emacs-vterm 切换到 eat 了。
下定决心切换的主要原因是 vterm #179 这个 bug——当调整 vterm 窗口大小时,如果窗口宽度变小,部分 buffer 的内容会被截断,并且是永久性的删失。
换成 eat 以后没有这个问题。
用 eat 配合了几个常用的 REPL,ipython 和 radian 都试了试,在性能方面,没有很大的感知。甚至 eat 因为有做一些 “平滑” 滚动方面的工作,某些时候视觉观感要比 vterm 更好。另外 vterm 因为是对接外部 C 库 (libvterm),时不时会出现一些显示 bug,eat 目前用下来还没怎么遇到过。
另外 eat 因为是纯 lisp 实现,相比较 vterm 这种对接外部 C 库的,对 emacs 原生键位的兼容性可能会更好一些,提供了多种不同的键位模式:eat-char-mode, eat-semi-char-mode, eat-line-mode, eat-emacs-mode,方便不同的 emacs 用户根据自己的喜好来使用。
当然也许 vterm 也可以做到类似的配置,只是我并不了解,如果是这种情况也欢迎指正。
eat 也不需要 C 编译器和 cmake 了,对于边缘环境可能有帮助。两个都不支持 windows。
6 个赞
我觉得最重要的一点可以将终端嵌入到任意 Buffer 中,从而实现无缝支持 Eshell ,不需要手动设置需要用到 VTerm 命令。
1 个赞
rua
2025 年4 月 17 日 09:40
3
我这里不知道是不是 shell 的 ps1 改过还是 term 变量有问题,每次输入都会跳重复的的东西
试一下运行 eat-compile-terminfo
我在 mac 上也有这个问题。可能是 eat 自带的 terminfo 和系统不兼容、需要重新编译。
1 个赞
eat 好是好,就是还有一些小问题。在 gnome wayland 上(emacs pgtk),似乎有时键入 top 都会导致屏幕滚动异常
另外 TERM 默认是 eat- 开头的,和 zsh 某些主题的 prompt 配合工作不良。自定义 TERM 是一个办法,但为此不得不丢失 shell 集成的功能(是的,你可以修改 shell 集成的函数,但难以在自己工作的很多台远程机器上同时这么做,这等于将自己定制的 shell 函数全部得分发一遍)
ps -ef 一下 eat 慢得要死,vterm 瞬间。
lf, yazi 在浏览有中文文件名的目录时还是渲染对不齐。
ps -ef 一下 eat 慢得要死,vterm 瞬间。
这个没什么意义啊。 ps -ef
根本就不是 human-readable 的东西。正常来说 ps -ef 这种超大量的 text 都是要接 grep 过滤,awk sed 去做修改的,根本就不是拿来直接看的。
你用 ps -ef 之类的瞬间输出大量文本的内容来做性能测试没什么意义,实际使用根本用不到这个。
我个人认为 eat 的性能我够用了。用 ipython aider lazygit 之类的终端交互 app 流畅度都足够,就可以了。yazi 我使用没任何问题,不知道你说的渲染对不齐是啥情况,当然我很少用到中文目录,随便看了几个我电脑里的中文目录显示是正常的,但是也可能是因为我中文目录少,所以见过的 case 少。
eat 好是好,就是还有一些小问题。在 gnome wayland 上(emacs pgtk),似乎有时键入 top 都会导致屏幕滚动异常
没用过 pgtk。在 lucid / macOS / tty 上 top 显示都没什么问题。不过我一般都用 htop,很少用 top。
另外 TERM 默认是 eat- 开头的,和 zsh 某些主题的 prompt 配合工作不良。
你用的是什么主题?我用 powerlevel10k 没有任何问题,显示和 TERM=xterm-256color 没有任何区别。
感谢楼主提醒, 一直注意到 vterm 里窗口大小变化之后, buffer 内容会被截断的问题,
但是一直忍着, 没去管,
今天循着楼主提到的 bug 去 nvim 的 issue 里翻了一翻,
master
← clason:bump-libvterm
已打开 04:40PM - 16 Sep 22 UTC
This includes -- but does not yet enable -- reflow functionality in `:terminal` … (i.e., output adapts to resizing the Neovim window).
This seems to be stable in a very brief test, so we could think of just enabling it by default after 0.8. (There are still issues with resizing pushing content into scrollback, where information gets lost, but it's already a strict improvement over the status quo.)
For those adventurous enough and building from source, it can be enabled by adding
```
vterm_screen_enable_reflow(rv->vts, true)
```
after this line: https://github.com/neovim/neovim/blob/e512d3ecf2b6e0104d2df0d863c8d51a2d7e5ab1/src/nvim/terminal.c#L211
似乎只要在这行后面
vterm_screen_enable_altscreen(term->vts, true);
加上
vterm_screen_enable_reflow(term->vts, true);
就有一定的改善
更新:
试用了一下, 发现有概率会使 emacs 强退, 建议谨慎尝试
1 个赞
hiecaq
2025 年5 月 10 日 03:33
11
eat-eshell-mode
在我这里在STDOUT打印大量cjk字符的时候会偶现地直接卡死Emacs,C-g都抢救不了
A terminal written in PyQt6 for the Emacs Application Framework.
Emacs 里最强的终端模拟器, EAF多线程加持,不会卡死
I just moved from emacs-vterm to eat, largely because of a chronic bug in vterm (#179 ) where buffer contents get lost when the window is resized to a narrow width. With eat, this issue no longer arises. Though performance with REPLs like IPython and Radian seems equal,elat provides smoother scrolling and a more visually pleasing experience. Because it’s written entirely in Emacs Lisp, eat integrates more smoothly with native keybindings and provides flexible key modes such as eat-char-mode and eat-emacs-mode to accommodate various workflows. Unlike vterm, it also doesn’t rely on a C compiler or libvterm, so it’s easier to install, particularly in limited environments though neither supports Windows yet.
5 个赞
, is this a translated version?
,翻译?
使用了eat之后(主要是在eshell里面使用)的感觉:
好处是eshell现在可以真的作为主力shell了,之前可能会因为一些TUI程序切到终端里面使用
一些问题是貌似在 ssh 的时候 C-c 会直接结束 ssh 的连接?以及在 ssh 输密码的时候对复制粘贴的支持好像有些问题
(虽然可以用 tramp 来解决这个问题,但是 tramp 对于需要跳板机的情况貌似不是很方便