學習Emacs系列教程(九) 緩衝管理

2021-06-08 05:26:15 字數 3867 閱讀 7639

首先提及一點,這裡的緩衝就是emacs中的buffer。鬧,所謂的緩衝就是當前你正在編輯的東東。比如,你開啟乙個檔案emacs會建立乙個緩衝來裝載這個檔案,當你呼叫幫助時emacs會建立乙個叫"*help*"的緩衝來顯示幫助內容,開啟tutorial則會出現tutorial.cn這個緩衝。本質上來說緩衝就是記憶體中開闢的一段空閒空間。

每個緩衝都有自己的名字,像上面說的"tutorial.cn" ,或者"*scratch*",這個是emacs預設建立的緩衝用於除錯lisp表示式,緩衝的名字顯示在mode line上。在乙個emacs裡面我們可以建立n多個緩衝,但同時只能有乙個緩衝處於啟用狀態,稱之為「當前緩衝」,大部分操作命令只會對當前緩衝起作用。

一、操作緩衝

我們可以通過命令 c-x b buffer (switch-to-buffer) 來建立乙個緩衝,這裡buffer指你對這個緩衝起的名字,如果這個緩衝已經存在則會直接開啟它。其實當你輸完c-x b 後會出現乙個預設的緩衝,就是上乙個使用的緩衝,可以用回車直接切換過去。建立了多個緩衝之後使用c-x left 或者 c-x right 來左右切換,left和right是左右方向鍵。還有另外兩個建立緩衝的命令,c-x 4 b buffer (switch-to-buffer-other-window) 在另乙個window中建立緩衝和c-x 5 b buffer (switch-to-buffer-other-frame) 在另乙個frame中建立緩衝,windows和frame的概念將會在下一章中介紹,這裡只是告訴大家這兩個命令。採用這種方式建立的緩衝一開始裡面是一篇空白,並沒有與某個檔案聯絡起來,在隨便編輯過後可以直接關掉且不會寫到磁碟上,當然,除了你想把它存為檔案。另一種建立緩衝的方式是,新建或開啟乙個檔案,emacs會預設建立已這個檔名為名的緩衝,所以這裡可以看出檔案和緩衝的區別,緩衝不一定是檔案,但檔案一定對應了乙個緩衝。需要注意的一點是,緩衝名不要用空格開頭,這種緩衝在emacs中有其它用途,大家應盡量避免。

顯示所有的緩衝使用命令c-x c-b (list-buffers) ,可以看到下面的效果。

最前面有個"."標識的是當前緩衝。在crm這一欄中,還有些特殊符號,%表示是唯讀緩衝,*表示緩衝已經被修改過了。剩下四欄根據名字也可以理解了。這個命令加個字首,c-u

c-x c-b 則只會現在對映到檔案的緩衝,對於上圖就是dde。

在使用emacs一段時間後可能積累了大量的緩衝,甚至拖慢了程式的速度,這時我們需要關閉一些不用的緩衝,釋放點記憶體。命令c-x k buffer (kill-buffer)就是關閉指定的緩衝,如果這個緩衝對了乙個修改過的檔案則會出現提示是否直接關閉。一次也可以關掉很多緩衝,使用 kill-some-buffers,這個命令會出現很多提示,然後根據使用者確認來關閉,首先會問是否關閉所有未修改過的緩衝,如果回答"no",則會從未修改的到修改過的緩衝乙個乙個詢問是否關閉。如果你三天都沒關過emacs那就試試 clean-buffer-list ,預設幫你關掉三天都未使用過的緩衝。

下面再介紹一些雜項操作:

c-x c-q (toggle-read-only),切換當前緩衝的唯讀屬性。

c-u m-g m-g

num ,跳至前一使用緩衝的第num行,這個在寫參考文獻引用行的時候稍微有用。

rename-buffer,重新命名乙個緩衝。

rename-uniquely,重新命名當前緩衝,直接在其後加乙個數字字尾。

view-buffer,唯讀方式開啟乙個緩衝,而且什麼都不能修改,按q退出view模式。

二、buffer menu

上一節說到我們可以使用c-x c-b 來檢視所有的緩衝,另外還有個命令可以起到同樣的效果buffer-menu,但是這個命令不僅能讓你看看現在有哪些緩衝,更重要的是它能對這些緩衝進行各種管理。在使用buffer-menu這個命令後,我們可以看見emacs的模式名變成了"buffer menu",說明現在進入了另一種模式,具體怎麼操作這些緩衝詳見下表:

按鍵效果

備註spc, n

移動到下一項

p移動到上一項

d, k

標記刪除緩衝,並移動到下一項

按x後生效

c-d標記刪除緩衝,並移動到上一項

按x後生效

s標記儲存緩衝

按x後生效

x執行標記刪除或儲存的緩衝

u取消當前緩衝的標記,並移動到下一項

backspace

取消當前緩衝的標記,並移動到上一項

~設定緩衝為未修改

%切換緩衝的唯讀屬性

1將選中緩衝滿視窗顯示

2將選中緩衝顯示在一半視窗中

t緩衝用tags table 方式顯示

f, ret

顯示選擇緩衝

o緩衝在新視窗顯示,並選中該視窗

c-o緩衝在新視窗顯示,但不選中該視窗

b將選中緩衝移動到最後一行

m標記緩衝在新視窗顯示

按v後生效

v顯示標記的緩衝

g重新整理buffer menu

t切換顯示檔案關聯緩衝

q退出buffer menu

需要注意的是大部分功能是立即生效的,但像d,s,m這些只會起標記作用,在確認之後才會執行,而且按了這三個鍵後對應會在緩衝名前顯示"d", "s", ">" 三個符號用作提示。

三、間接緩衝

間接緩衝是指與其它緩衝共享內容的一種緩衝,它鏈結在乙個基緩衝之上。命令 m-x make-indirect-buffer ret base-buffer ret indirect-buffer 會建立乙個叫"indirect-buffer" 的緩衝,它和"base-buffer" 繫結。或者使用 clone-indirect-buffer 來快速複製當前緩衝。間接緩衝和基緩衝之間有乙個同步,就是他們的內容是完全一樣的,不過也僅僅是內容一樣,本質上卻是兩個完全分離的緩衝。不同於基緩衝,間接緩衝是不能和檔案關聯的,如果你試圖儲存乙個間接緩衝只會作用到其基緩衝上。另外,由於兩種緩衝的關聯性,你關閉基緩衝時間接緩衝也會被關閉,而關閉間接緩衝不會有任何事發生。

小結:按鍵

命令作用

c-x b

switch-to-buffer

開啟或新建乙個緩衝

c-x 4 b

switch-to-buffer-other-window

在另乙個window中開啟或新建乙個緩衝

c-x 5 b

switch-to-buffer-other-frame

在另乙個frame中開啟或新建乙個緩衝

c-x left

next-buffer

移動到下乙個緩衝

c-x right

previous-buffer

移動到前乙個緩衝

c-x c-b

list-buffers

顯示所有緩衝

c-u c-x c-b

顯示對映到檔案的緩衝

c-x k

kill-buffer

關閉緩衝

kill-some-buffers

關閉多個緩衝

clean-buffer-list

關閉三天未使用的緩衝

c-x c-q

toggle-read-only

切換緩衝唯讀屬性

c-u m-g m-g num

跳至前一緩衝num行

rename-buffer

重新命名緩衝

rename-uniquely

重新命名緩衝,在其名後加數字

view-buffer

唯讀方式開啟緩衝

buffer-menu

開啟buffer menu

make-indirect-buffer

建立間接緩衝

clone-indirect-buffer

建立當前緩衝的間接緩衝

學習Emacs系列教程(二) 導航

學習emacs系列教程 二 導航 學習emacs系列教程 一 基本使用 href 學習emacs系列教程 一 基本使用 上回開了個頭,簡單的介紹了emacs的一些基本常識,這回繼續說基本常識,怎麼移動你的游標。可能有人會說,這上下左右鍵不是很好用嗎,還用你來講。呶,emacs的強大在於你能夠只使用鍵...

學習Emacs系列教程(二) 導航

上回開了個頭,簡單的介紹了emacs的一些基本常識,這回繼續說基本常識,怎麼移動你的游標。可能有人會說,這上下左右鍵不是很好用嗎,還用你來講。呶,emacs的強大在於你能夠只使用鍵盤左邊那堆鍵來完成任何事情 不包括頂上的esc和function 這也是emacs的設計宗旨。為了試驗這些按鍵,大家在進...

學習Emacs系列教程(一) 基本使用

猛的一看,沒什麼太出彩的地方,感覺比較簡陋。上面依次是標題欄 選單欄 工具欄,中間一大塊就是編輯文字的地方,下面兩行是mode line 和echo area。echo area是你輸入命令和顯示訊息的地方。在mode line中第乙個字元表示字符集,c代表chinese gbk,後面那個 符號表示...