目前我的shell和emacs是分开的,在工作过程中经常需要更改文件,比如在 shell 中执行 vim demo.c,使用 vim 修改,没有 emacs 来的顺手。而如果直接在 shell 里输入 emacs demo.c 的话会直接打开一个新的 emacs 窗口,需要重新加载,很慢。
有没有什么办法能够让 emacs demo.c 这样的命令能够直接让已有的 emacs 窗口来加载这一个文件呢?
或者是如果我用 vterm 这样 emacs 内置的终端来执行文件编辑操作的话,能否让emacs理解我想新开一个buffer来编辑这个文件呢?
如果是用emacsserver+emacsclient的话,shell里执行emacsclient demo.c 会直接在已有的 emacsclient 实例里面打开这个文件吗
是的,你也可以看看 with-editor,它可以自动将 shell-command 的 EDITOR 设为 emacsclient
tong
6
我用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 个赞