幫你精通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
【編輯推薦】