我正在尝试创建一个函数,将文本插入任意文件而无需切换到该文件的缓冲区。
我知道这可以通过 echo 来完成,但是有没有办法仅使用 elisp 来完成?
答案1
尝试这个功能:
(defun append-string-to-file (string filename)
"Appends STRING to FILENAME."
(interactive)
(append-to-file string nil filename))
答案2
您需要将缓冲区设为当前状态才能对其内容执行几乎所有操作。将缓冲区设为当前状态与 Lisp 解释器有关,它不涉及在窗口中显示缓冲区。基本操作是set-buffer
设置缓冲区以进行后续操作,然后save-excursion
执行一段代码并恢复当前缓冲区。
有许多宏被调用with-SOMETHING
来执行具有不同设置(例如当前缓冲区)的代码,并在代码退出时恢复设置(无论出于任何原因,无论是正常退出还是异常)。
(with-current-buffer "name-of-file-that's-already-open"
(goto-char 42)
(insert "hello"))
with-
如果您想打开文件并在完成后关闭它,标准库中没有宏。(警告:直接在浏览器中输入。)
(save-excursion
(let (buf)
(unwind-protect
(progn
(setq buf (find-file-noselect "filename"))
(when buf
(goto-char 42)
(insert "hello")))
(if buf (kill-buffer buf))))