如何在系统的shell里快速的传递一个文件到emacs打开?

目前我的shell和emacs是分开的,在工作过程中经常需要更改文件,比如在 shell 中执行 vim demo.c,使用 vim 修改,没有 emacs 来的顺手。而如果直接在 shell 里输入 emacs demo.c 的话会直接打开一个新的 emacs 窗口,需要重新加载,很慢。

有没有什么办法能够让 emacs demo.c 这样的命令能够直接让已有的 emacs 窗口来加载这一个文件呢?

或者是如果我用 vterm 这样 emacs 内置的终端来执行文件编辑操作的话,能否让emacs理解我想新开一个buffer来编辑这个文件呢?

这不是emacsclient 干的事情吗?

如果是用emacsserver+emacsclient的话,shell里执行emacsclient demo.c 会直接在已有的 emacsclient 实例里面打开这个文件吗

是的,你也可以看看 with-editor,它可以自动将 shell-command 的 EDITOR 设为 emacsclient

谢谢各位🙏🏻

我用emacs vterm , 在我的~/.zshrc文件里面配置

vterm_cmd() {
     local vterm_elisp
     vterm_elisp=""
     while [ $# -gt 0 ]; do
         vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")"
         shift
     done
     vterm_printf "51;E$vterm_elisp"
 }

find_file() {
   vterm_cmd find-file "$(realpath "${@:-.}")"
 }

find_other_file() {
   vterm_cmd find-file-other-window "$(realpath "${@:-.}")"
 }

然后在vterm里面使用find_file或者find_other_file + filename , 这样就可以在vterm里面传递filename到emacs里面了。 具体可以参考GitHub - akermu/emacs-libvterm: Emacs libvterm integration

2 个赞

又学到一招,感谢