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
【编辑推荐】