我经常在 emacs 里面用 vim

通过 ansi-term, 因为在 ansi-term 中打开的终端 find file 不太好用, 所以直接在 term 所在的当前目录用 vim.

用 doom emacs,写个命令 alias e='emacsclient -n',然后就可以 e some/file 了。

vterm

find file为啥还要打开ansi-term,使用M-x find-find不更方便吗

他是在 ansi-term 的 buffer 下想打开当前目录下的文件。在 term 里面经常会 cd 切换目录。如果emacs 没有跟着同步的话,find-file 打开后的默认目录就是最开始打开 ansi-term 时的目录。

用 vterm 可以解决楼主的问题,可以自动同步目录。任何时候时候用 find-file 或者 dired 都没问题。而且 vterm 比 ansi-term 速度更快。

1 个赞

本来想说 “It’ works", 实际上却是输出了

VTerm needs module support. Please compile Emacs with the --with-modules option!

原来还得编译一套 emacs for ubuntu. 我再研究研究

是的, 就是这个问题

ansi-term ssh 远程的时候 tramp 能有用吗

我29 ansi-term 里cd 目录,find-file都是跟随的,我记得28也没有这个问题啊。远程tramp好像就只有vterm了

我在 29 最新版本都是没法在 ansi-term/term 下同步目录。 你应该是做了 shell 端的设置。

# 这是 zsh 需要做的修改
#
# INSIDE_EMACS 则是 Emacs 在创建 term/shell/eshell 时都会带上的环境变量
# 通常 shell/tramp 会将 TERM 环境变量设置成
# dumb,所以这里要将他们排除。
#
# shell 下的目录同步不采用这种方式
function precmd() {
  if [[ -n "$INSIDE_EMACS" && "$TERM" != "dumb" ]]; then
    echo -e "\033AnSiTc" "$(pwd)"
    echo -e "\033AnSiTh" $(hostname -f)
    echo -e "\033AnSiTu" "$LOGNAME"
  fi
}

这样设置是可以的,不过 vterm 也一样,都是要进行 shell 端的设置。

参考大佬对 term-mode 的介绍 :

1 个赞

如上, 用 emacsclient 解决了我的疑惑, @Dieken .

而且, 原来可以在 shell 端配置 zsh 来实现同步目录的效果. 谢谢 @aqua0210

bash ansi-term不需要设置,但vterm需要,zsh两者都需要shell端设置