编译了之后,启动 vterm 时仍然询问是否编译(无法复现)

doomemacs 使用的是 straight, straight 会把 vterm 的 source code symlink 到另外一个目录 straight/build/vterm 底下,然后 vterm 会将编译得到的结果储存在 build 底下的那个目录。

所以如果你用 doomemacs 每次都要重新编译,很有可能就是你每次重启 emacs 的时候, build 底下的 那个 vterm 的 directory 都重新被 symlink 了一次。straight 每次做 symlink 都会清理掉这些编译产物,所以你需要重新编译。所以你可以检查一下每次重新启动 emacs 之后, build/vterm 这个目录是不是被反复的重新 symlink 了。

2 个赞

我也是看了楼主回复后就不想再回复的。本质上这是个很低级的问题。开始我也尝试提供一些信息和线索供楼主解决问题,事实是楼主并没有理解基本问题而且有点上纲上线。原始问题描述没有提及环境和配置,尤其是使用doom。对于vterm的编译更是没有理解原理。这些信息对于解决问题至关重要。现在后知后觉道歉也是一个好事,先讲清自己的问题,有助于快速解决,节约彼此的时间和精力。共勉!

2 个赞

这个可能是正解,虽然我没有用doom。如果使用symlink确实可能出现奇奇怪怪的问题

谢谢提供思路,目前检查了一下该目录,暂时没发现重新 symlink 的迹象,下图里,我做了 3 次检查。

  • 第一次是关闭 emacs 前
  • 第二次是重新启动 emacs 后
  • 第三次是重新启动 emacs,输入 M-x vterm后,此时 vterm 正常启动

目前没有重新 symlink 的情况。这里文件的时间,是我删掉了 vterm 文件夹,重新让 emacs 编译一次的时间,三次检查文件时间没有改变。

你现在这个 build/vterm 被 link 到了 straight 存放 source code 的 repo 底下,同时 build 底下的 .so 也被编译好了。那么只要你不要改 load-path,而且 vterm 没有更新,应该每一次都能直接打开的,不需要重新编译。

另外, doom 不是自带一个 vterm 的 module 吗?完全没必要自己加载 load-path 吧。

对,我之前是没配置的,单纯开了 vterm 这个 module 而已。

我现在已经去掉 load-path 也能正常运行了。前两天的情况,我尝试了好几次,都无法复现。晕…