怎么才能知道Emacs中活動buffer的數量?有三種方法:buffer列表(鍵入C-x C-b時顯示在一窗口中),Buffers菜單(它列出了活動的buffer和瀏覽這些buffer的命令),還有Buffer彈出菜單(按住Ctrl,單擊鼠標左鍵訪問,它根據模式列出buffer)。
Emacs會創建它自己的專用buffer。這些內部buffer的名字一般來說格式為 *buffer name* 。*Help*、*scratch*和*Buffer List*就是Emacs創建的其中一些buffer。
當你啟動Emacs時,它會建立兩個buffer:
*Messages*
*scratch*
*Messages* buffer存儲了Emacs收集自它啟動時從minibuffer里顯示的消息;*scratch*是個臨時的scratchpad(涂鴉板),以便你有地方輸入東西。除非你使用C-x C-w明確的把它寫到文件中,否則它不會被保存下來。
當然,一般來說你用Emacs編輯文件時,這些文件就會被拷貝到同名的buffer中。如果你需要獲得幫助,則會進入 *Help* buffer。
能在Emacs里打開的buffer數量實際上沒有限制。大多數情況下,只顯示一個或兩個buffer;不過即使你無法看到全部,你在某個Emacs會話里創建的buffer仍處于活動狀態。你可以把這些buffer想象成一疊紙,只有放在最上面的那頁才顯示在你眼前。不過任何時候,你都可以翻到另一頁(另一個buffer),或者也可以創建一個新頁。
每個buffer都關聯一個主模式(major mode),它決定了Emacs在這個buffer里的行為。例如,設計用來書寫文本的文本模式(text mode),和Lisp模式的表現就不一樣,后者被設計用來編寫Lisp程序。
如何操作多個buffer如果要新建包含一個文件的buffer,只需鍵入 C-x C-f 找到該文件。Emacs就會自動新建一個buffer并定位到該buffer。如果該文件已打開,C-x C-f 只是定位到已有buffer中,這一點很有意義,可以避免同一文件存在多個buffer導致混亂。如果鍵入 C-x C-f 后輸入的文件名不存在,Emacs認為你想新建一個文件,并定位到一個空白buffer中。
C-x b:在多個buffer之間進行切換;鍵入命令后輸入buffer名,回車。如果已存在該buffer,則切換到該buffer中;否則以輸入的buffer名新建一個buffer,但是注意這個buffer并沒有和文件相關,因此關閉Emacs,它不會給你任何提示。
C-mouse 1:按住Ctrl并單擊鼠標左鍵,會彈出一個Buffer Menu,它會按主模式類型列出活動的buffer供你選擇。
C-x ->(<-):按下C-x后(放開)再按向右(左)方向鍵可以定位到下(上)一個buffer中。
如何刪除buffer注意:如果你修改了一個buffer(且該buffer和一個文件相關),則Emacs會在刪除buffer前詢問你是否保存所做修改;如果這個buffer和文件不相關,則你在該buffer里所做任何修改都會丟失,Emacs認為你不在乎這些buffer因此不作任何提示。因此編輯重要的buffer之前最好先 C-x C-w 寫到文件中,或者用 C-x C-f 新建buffer。
C-x k:kill-buffer命令,刪除一個buffer;
M-x kill-some-buffers:刪除一些buffer;
如果刪除了當前會話里的所有buffer,Emacs會新建一個 *scratch* buffer,總得有個東西顯示在屏幕上不是?:P
如何保存bufferC-x C-s:保存當前buffer;
C-x s:即save-some-buffers命令,一次保存所有buffer;
如何重命名bufferM-x rename-buffer:重命名buffer;
如何使buffer只讀C-x C-q:切換buffer的read-only和read-write狀態;
buffer和window的關系buffer和window并不是一一對應的,同一個buffer可以有多個window,比如你可以同時在多個window里查看同一buffer的不同部分。Mark是和buffer關聯的;而point是和window關聯的。
C-x 2:即split-window-vertically命令,水平切分窗口;
C-x 3:垂直切分窗口;
C-x 4 b(f):在另一個窗口選擇另一個buffer(查找另一個文件),這樣你可以不用切換到另一個window,就改變其buffer或打開文件;
C-M-v:滾動另一個window(C-v是滾動當前window);
C-x o:此處 o 表示other(其它),移動光標到另一個window;
C-x 0:刪除當前所在的window;
C-x 1:刪除當前所在window之外的所有window;
C-x 5 2:新建一個frame;
from:
http://blog.donews.com/leal/archive/2005/10/18/592725.aspx