emacs的窗口和緩存區[轉]


原文地址 http://apps.hi.baidu.com/share/detail/15870273

概念上,Emacs在兩個方面有別於一般程序。首先,“窗口"的概念不同。其次,Emacs的“緩沖區”是脫離窗口或框架獨立存在的。
(Emacs里的frame相當於Microsoft Windows的window概念。A frame can show several windows, each showing a buffer.) 

1 窗口與框架

我們所看到的Emacs“窗口”並非Emacs的窗口,而是Emacs的圖形窗口框架(GUI windows frames)。理解這個概念是必須的,因為在未有圖形化窗口之前,Emacs已經可以在“終端”運行了,用Windows的術語來說,就是“控制台"程 序。看看下面的圖,就明白了。


1.1 緩沖區,獨立於窗口與框架之外

本質上,窗口和框架只是顯示緩沖區內容的工具。緩沖區內可以包含文件內容,可以是Emacs內部自定義的,譬如*Messages*,*scratch*,或*help*等,也可以是用戶自定制而其中內容未寫入文件的。
許多圖形界面的應用程序是將圖形窗口(Emacs中稱之為Frames)與一些文件緊密聯系在一起的,而Emacs的將緩沖區與圖形窗口分離的方式是強大又靈活的。實際上,我們在大部分時間里寧願使用一個Emacs Frame,而使用C-x b來切換緩沖區,這要比在多個Frame中采用鼠標切換或采用切分窗口等方式更容易,盡管它們在一些情況下存有優點。

1.2 更深入地了解緩沖區

你知道該怎樣獲知Emacs中開了幾個緩沖區及它們的詳細信息嗎?有三種方法可以實現:

  1. C-x C-b,顯示緩沖區列表
  2. 緩沖區菜單,列舉了打開的緩沖區以及導向它們的快捷命令;
  3. 在Emacs的窗口中,摁下Ctrl鍵,點擊鼠標左鍵,可以彈出緩沖區列表。


Emacs自行定義了一些緩沖區,它們的名字,通常是像*buffername*,*help*,*scratch*這樣的格式,並且緩沖區列表本身就是Emacs自定義的緩沖區,如下圖:

當你啟動Emacs的時候,會產生*Messages*和*scratch*兩個緩沖區。*Messages*是用來顯示從Emacs啟動開始的所有命令信 息的緩沖區,*scratch*是草稿緩沖區,你可以在其中亂寫東西,但不會被保存,除非用戶使用C-x C-W命令。

在 用戶使用 Emacs編輯文件時,所讀取的文件會被復制到同名的緩沖區內。如果用戶需要幫助,那么也可以打開*help*緩沖區。可打開的緩沖區的數量是沒有限制 的。大部分時間,僅有一兩個緩沖區被顯示,還有好多即使你沒看到,但它們也是存在的。你可以把緩沖區想象為一堆頁面,其中僅有一頁是當前頁,你可以切換到 令一頁,或者創建新頁。每個緩沖區都關聯一個主模式,它決定了在該緩沖區內,Emacs的行為。譬如,text模式,被設計為書寫文檔的;Lisp模式, 是用於書寫Lisp程序的。用戶可以在一個Emacs窗口或框架中顯示多個緩沖區,要緊是記住你創建的所有緩沖區。

2 在多緩沖區模式下工作

如 果你想創建一個包含文件內容的緩沖區,可以C-x C-f,Emacs會自動創建一個緩沖區並將你帶入其中。如果你已經在一個緩沖區打開了這份文件的副本, 那么C-x C-f會把你帶入那個已存在的緩沖區中,在此請仔細體會一下,Emacs給你帶來的好處吧!而如果你要打開的文件不存在,Emacs會為你創建 一個新文件的緩沖區,並將你帶入其中。

請記住:
C-x C-f是打開一個文件,該命令后總是跟隨這目錄/文件名的,如果要打開的文件不存在,就創建新文件。

2.1 切換緩沖區

你有意識到模式行並不顯示文件名,而僅僅顯示緩沖區名嗎?其他一些版本的Emacs可以兩個名字都顯示,但GNUEmacs只顯示緩沖區名,這是因為通常情況下,文件名和緩沖區名是一致的,除非你去修改它們。
要在不同緩沖區之間移動,就C-x b吧。Emacs會給你提供一個默認的最近隱掉的緩沖區名,回車就可以進入。或者輸入你想進入的緩沖區名字的前幾個字,然后摁Tab鍵,Emacs會自動為你補全緩沖區名,回車進入即可。

請記住:
C-x,b之后則跟隨一個緩沖區的名字。如果相應緩沖區不存在,Emacs會自動創建一個新的空緩沖區,與C-x C-f的不同之處是,新建的緩沖區不與文件關聯,在退出Emacs時,Emacs不會提醒你要保存緩沖區。

查看已打開的緩沖區,還有以下兩種可選方式:

  1. C-x C-b,這種方法可用於終端環境中的Emacs;
  2. 在Emacs窗口中,摁下Ctrl鍵,點擊鼠標左鍵。該方法只對圖形化的Emacs有效。

2.2 刪除緩沖區

為什么要刪除緩沖區?

  • 你的Emacs中開的緩沖區太多了,想去掉幾個;
  • 對已有文檔的修改具有災難性,將這個緩沖區干掉就可以了。
要刪除緩沖區,可鍵入 C-x k,Emacs 會顯示當前被顯示的緩沖區名,也可鍵入想刪除的緩沖區的名字,然后回車。如果已與文件建立關聯的緩沖區,內容有了 改動,Emacs會提示你保存一下。其他情況,則緩沖區就永遠的消失了。而鍵入M-xkill-some-buffers可成批刪除緩沖區,系統會一個一 個列舉已存在的緩沖區,問你是不是把它kill掉,你只需要回答`yes'or`no'就可以了。當所有的緩沖區都被kill掉之后,Emacs不會屏幕 空着的,它會創建一個新的*scratch*緩沖區。

3 在多個窗口中工作

窗口是屏幕上顯示Emacs緩沖區內容 的區域。可以一次打開多個窗口,每個窗口可以顯示不同的緩沖區,也可以顯示相同緩沖區的不同部分,這些窗口之間不存在覆蓋現象,只是對屏幕進行分割。一旦 創建新窗口,舊窗口就自動縮小。就好像屏幕是餡餅,可以把它切成許多塊,但這些窗口的排列只有兩種方式:水平的或豎直的。

3.1 創建水平排列的窗口

最常用的命令是C-x 2, 可以將當前窗口水平切分為兩個窗口,可以不斷重復這個命令,切分出更多的窗口。你也可以讓Emacs每次啟動時打開多個窗口。如果你需要在水平切分的兩個 窗口中編輯兩份文檔,則可以在啟動Emacs時,指定這兩個文件的名字。譬如,我想編輯1.tex和2.html兩份不同的文檔,啟動Emacs時,可以 直接emacs 1.tex2.html即可。如果編輯超過兩份文檔,那么Emacs會在一個窗口中顯示所指定的文檔中最后的那份,然后會在另一個窗口中給出緩沖區列表。

可以在一個窗口中,使用C-M-v去滾動另一個窗口的屏幕。

3.2 在多個窗口間遷移

要將光標從一個窗口切換到另一個窗口,可以C-x o(o表示other)。在圖形化的Emacs中,可以用采用鼠標來切換窗口。

3.3 將窗口咔嚓掉

要刪除當前所在的窗口,可以C-x 0。而要刪除所有的窗口,只保留當前窗口,可以C-x 1。另外也可以像刪除緩沖區那樣,交互刪除一批窗口,M-xdelete-windows-on。但刪除一個窗口僅僅意味着它不再顯示,而不會刪除緩沖區內的任何信息,我們依然可以使用C-x b來切換到自己需要的緩沖區。

4 在多個框架中工作

現在,我們都已經知道Emacs將圖形化窗口稱為“Frames”的。這一節中,將討論如何創建框架,框架之間的操縱,以及框架的刪除。

4.1 創建新框架

C-x 52,打開一個新框架,Emacs會讓這個新框架包含當前的緩沖區,並把它置於當前框架之上。如果你建立的新框架完全覆蓋了當前框架,那么可以定制新框架的尺寸來把它們分開。比較方便的解決方法,就是把以下代碼添加到你的.emacs文件中:
(setq initial-frame-alist '((top .10) (left . 30)   (width . 90) (height . 50)))
(setq default-frame-alist '((width .80) (height . 45)))

以 上代碼設定了Emacs框架的寬度和高度。第一個框架的尺寸是在initial-frame-alist中設定的,90個字符寬,50行高,框架左上角坐 標為(10,30)。后續框架尺寸,由default-frame-alist定義,80個字符寬,45行高。你也可以自己根據你的顯示器自行設置其他參 數。

如果你想為已經打開的一個名為xxx的文件創建一個新框架,那么可以C-x 5 fxxx。如果你想為已經打開的一個名為xxx的緩沖區創建一個新框架,可以C-x 5 b xxx。

注意:這里復習一下C-x 4f xxx和C-x 4 b xxx。

4.2 在多個框架間遷移

C-x 5 o 即可。

5. 關於緩沖區更多的知識

在本節中,將了解多個緩沖區的保存、緩沖區重命名、設置緩沖區只讀,以及針對緩沖區列表的一些操作——這不僅僅是一個有用的工具,在討論目錄編輯器時也是一個很好的原理上的導引。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM