prepend-to-file?

就算是 C 语言写的程序,修改一个文件的时候也是遵循 打开文件 加载入缓存区 修改缓存区 保存缓存区 关闭文件的顺序的,只是你没看到而已。 Emacs Lisp 也是要这么做。

1 个赞

楼主也许只是不想看到打开文件的过程吧:

(defun prepend-to-file (PATH TEXT)
  (save-window-excursion
    (find-file PATH)
    (goto-char (point-min))
    (insert TEXT)
    (save-buffer)
    (kill-current-buffer)))

(prepend-to-file "/tmp/test-emacs-prepend.txt" "a\n")
(prepend-to-file "/tmp/test-emacs-prepend.txt" "b\n")
(prepend-to-file "/tmp/test-emacs-prepend.txt" "c\n")

查看结果 cat /tmp/test-emacs-prepend.txt :

c
b
a

是不是每次都打开&关闭文件,看具体需求了。

还可以使用 shell-command 之类的方法。

2 个赞

ed teco awk 的缓冲区没本质区别。真要准确的说,你看到的不是 buffer,只是显示了缓冲区内容的图形窗口而已,它也可以不显示。

Emacs 的 Buffer 如果要译成中文的话大概就叫做“缓冲区”。当然了我不清楚“通常意义的缓冲区”,每个语境可能都有各自的解释。Emacs Buffer 不一定需要在 Window 显示出来:

(write-region (point-min) (point-max) "/tmp/test")

(with-temp-buffer
  (insert-file-contents "/tmp/test")
  (goto-char (point-min))
  (insert "# A New Beginning\n")
  (write-file "/tmp/test"))