就算是 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"))