从 vterm 切换到 eat 了

从 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 个赞

我这里不知道是不是 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 里翻了一翻,

似乎只要在这行后面 vterm_screen_enable_altscreen(term->vts, true); 加上 vterm_screen_enable_reflow(term->vts, true); 就有一定的改善

更新: 试用了一下, 发现有概率会使 emacs 强退, 建议谨慎尝试

1 个赞

我也切换到eat试用了,整体感受目前还行

eat-eshell-mode 在我这里在STDOUT打印大量cjk字符的时候会偶现地直接卡死Emacs,C-g都抢救不了

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 个赞

:thinking:, is this a translated version?

:thinking:,翻译?

使用了eat之后(主要是在eshell里面使用)的感觉:

好处是eshell现在可以真的作为主力shell了,之前可能会因为一些TUI程序切到终端里面使用

一些问题是貌似在 ssh 的时候 C-c 会直接结束 ssh 的连接?以及在 ssh 输密码的时候对复制粘贴的支持好像有些问题

(虽然可以用 tramp 来解决这个问题,但是 tramp 对于需要跳板机的情况貌似不是很方便