帮你精通Emacs:详述buffer的3类18种操作

Emacs的buffer是文本的载体。Buffer除了承载 textual contents 之外,还包括:

1)当前正在访问的文件,
2)文件是否修改过,
3)已经生效的 minor-mode 与 major-mode 等

所有这些都唔那个从 buffer-local 中查看。在 64 位机器上运行,单个 buffer 文件大小不超过 2^61 。

一、创建与选择 Buffer

如果打开的 buffer 并不存在,那么 C-x b 将会创建空白的 Buffer。

// buffer 操作列表
switch-to-buffer
switch-to-buffer-other-window
switch-to-buffer-other-frame
previous-buffer
next-buffer 
goto-line

重新绑定 previous-buffer 与 next-buffer 到 C-x p 与 C-x n 上面。

(global-set-key "\C-xp" 'previous-buffer) ;;custom
(global-set-key "\C-xn" 'next-buffer);;custom

列出全部已经打开的 buffers (list-buffers)

基于buffer-list ,我们能够管理好当前注意力。

二、Buffer 的常用操作

我们调用 C-x C-q 设置当前的 buffer 为 read-only-mode,当再次调用则会重启回到 writable 模式。之所以有如此的实现,是通过参数 buffer-read-only 与 view-read-only 两项设置。

Rename-buffer 对当前 buffer 重命名,倘若已存在,则会报错。

比较有意思的是 rename-uniquely,将会在同名的 buffer 后面参加数字,以区分开来。此功能多用于我们打开多个shell, 比如打开了两个vterm:

vterms

Buffer也加入到我们日常的工作流中, 比如 append-to-buffer, prepend-to-buffer, copy-to-buffer, 以及append-to-file 等等。

三、如操作文件一般操作 buffers

我们能够如杀死进程一样杀死 buffer,常用的函数为 kill-buffer, kill-some-buffers, kill-matching-buffers.

以及应用 clean-buffer-list 关闭绝大多数 buffer。更能惹起程序员兴趣的,也许是 midnight-hook.

Indirect-buffer 的操作,make-indirect-buffer, clone-indirect-buffer and clone-indirect-buffer-other-window。

应用的关键场景为,我们阅读文档的时候,双开同一份文件。

四、总结

以上,我们从三个方面阐述了 buffer 的概念与应用,总结如下:

// 1.创建与选择 Buffer (7)
switch-to-buffer
switch-to-buffer-other-window
switch-to-buffer-other-frame
previous-buffer
next-buffer 
goto-line
list-buffers 
// 2. buffer的高频操作 (5)
read-only-mode
append-to-buffer, 
prepend-to-buffer, 
copy-to-buffer
append-to-file 
// 3. kill buffer 与 indirect buffer (6)
kill-buffer
kill-some-buffers
kill-matching-buffers
make-indirect-buffer
clone-indirect-buffer
clone-indirect-buffer-other-window

举报
评论 0