You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Elisp代码在新Emacs会话中显示已有Buffer?

在新Emacs会话中打开现有Buffer的Elisp实现

下面分两种场景给出具体实现,你可以根据需求选择或整合:

场景1:Buffer关联已保存文件

如果当前Buffer对应已保存到磁盘的文件,直接启动新Emacs进程并指定文件路径即可:

(defun open-buffer-in-new-emacs-session ()
  (interactive)
  (let ((buffer-file (buffer-file-name)))
    (if buffer-file
        (start-process "new-emacs" nil "emacs" buffer-file)
      (message "当前Buffer未关联已保存文件,请使用临时文件方案"))))

代码说明:

  • buffer-file-name:获取当前Buffer对应的本地文件路径
  • start-process:启动独立的Emacs进程,将文件路径作为参数传入
  • 若Buffer未关联文件,会弹出提示信息

场景2:临时未保存Buffer

对于未绑定本地文件的临时Buffer,需要先把内容写入临时文件,再用新会话打开:

(defun open-temp-buffer-in-new-emacs-session ()
  (interactive)
  (let* ((temp-file (make-temp-file "emacs-temp-buffer-"))
         (buffer-content (buffer-string)))
    ;; 将Buffer内容写入临时文件
    (with-temp-file temp-file
      (insert buffer-content))
    ;; 启动新Emacs进程打开临时文件
    (start-process "new-emacs" nil "emacs" temp-file)
    (message "临时Buffer已在新会话打开,文件路径:%s" temp-file)))

代码说明:

  • make-temp-file:创建临时文件,前缀为emacs-temp-buffer-,系统自动生成唯一后缀
  • buffer-string:获取当前Buffer的全部文本内容
  • with-temp-file:打开临时文件并写入内容,完成后自动保存关闭

通用整合版函数

把两种场景整合到一个函数,自动判断Buffer类型并处理:

(defun open-current-buffer-in-new-emacs-session ()
  (interactive)
  (let ((buffer-file (buffer-file-name)))
    (if buffer-file
        (progn
          (start-process "new-emacs" nil "emacs" buffer-file)
          (message "已在新会话打开文件:%s" buffer-file))
      (let* ((temp-file (make-temp-file "emacs-temp-buffer-"))
             (buffer-content (buffer-string)))
        (with-temp-file temp-file
          (insert buffer-content))
        (start-process "new-emacs" nil "emacs" temp-file)
        (message "临时Buffer已在新会话打开,文件路径:%s" temp-file)))))

使用方法:

切换到目标Buffer后,按下 M-x 输入函数名 open-current-buffer-in-new-emacs-session 执行即可。

注意事项:

  • Windows系统需把"emacs"替换为Emacs可执行文件的完整路径,比如"C:/Program Files/Emacs/emacs.exe"
  • 临时文件不会自动删除,无需保留可手动清理,或在函数中添加run-at-time设置延迟删除逻辑

内容的提问来源于stack exchange,提问作者Mahavir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:12:27