Emacs 學習筆記二

 在這裏我們將會學會如何插入和刪除文本,在Emacs中進行移動,剪切和粘貼,裝入和保存文件.我們還會談到一些在我們要讀入一個新文件時要用到的有用的函數功能.
插入和刪除文本:
在Emacs中插入和刪除文本就如我們在打印機上輸入文本一樣的簡單,我們只是簡單的輸入我們要輸入的文本.這樣的輸入方式是和我們在Vim中所見到的輸入方式是不一樣的,因爲在Vim我們要插入模式下輸入文本,而在Emacs中不是這樣的.
在 Emacs中我們可以有幾種不同的方式來刪除文本.最簡單的方法就是按下Backspace鍵或者是Delete鍵.在大多數的Emacs安裝中 Backspace會刪除前一個字符而Delete會刪除後一個字符.如果這樣的方法不能刪除字符,我們可以使用C-d(delete-char)來刪除 字符.
輸入時自動斷行:
當我們在Emacs中輸入文本直到一行的結束時,Emacs並不會爲我們斷開這一行,相反他會表明會在下一行繼續 並且在下一行中我們可以繼續來輸入.在這個標記繼續的符號會出現在一個文本的最後一列.而我們可以通過下面的方式來使得Emacs可以自動斷行.我們按下 M-x然後輸入aotu-fill-mode
在Emacs中進行移動:
在Emacs中我們可以有幾種方式來進行移動.我們可以用小方向鍵來在Emacs中進行移動,我們也可以通過page-up,page-down來在頁間進行跳轉.
如果我們的小方鍵不可以進行了工作了,我們還可以用下面的方法來進行移動:
向前一個字符:C-f (forward-char)
向後一個字符:C-b (backward-char)
向上一行:C-p (previous-line)
向下一行:C-n (next-line)
向前滾動一頁:C-v (scroll-up)
向後滾動一頁:M-v (scroll-down)
在緩衝區的末尾新加一個空行:
當我們已經到了緩衝區的最後一行時我們希望Emacs如何來做呢?這裏兩個可能的方法:一是加入一個行並移動這一行;二是響鈴提示這樣是不可以的.我們可以根據我們的個人愛好來選擇一個解決方法:
如果我們要選擇加入一個新行,我們可以將下面的一行加入我們的.emacs文件中:
(setq next-line-add-newlines t)
如果我們要選擇響鈴,我們可以將下面的一行加入我們的配置文件中:
(seq next-line-add-newlines nil)
Emacs爲我們提供了許多的方法我們可以其中進行移動.我們並不需要馬上知道所有的這些方法,重要的我們要知道他們存在.當我們需要他時我們可以用到.
我們可以用C-a (beginning-of-line)移動到一行的開頭,用C-e (end-of-line)來移到一行的結尾.這些並不是太容易記住,但是當我們熟練了就不會覺得難了.
我們還可以以單詞爲單位向前或是向後移動.這要比按字符的方式移動要快得多,我們可以很容易的記住這些按鍵:Ctrl+右鍵(forward-word)向右移動,Ctrl+左鍵(backward-word)向左移動.
我們還可以用下面的一些按鍵進行移動:
向前一句:M-e (forward-sentence)
向後一句:M-a (backward-sentence)
向前一段:M-} (forward-paragraph)
向後一段:M-{ (backward-paragraph)
向前一頁:C-x ] (forward-page)
向後一頁:C-x [ (backward-page)
要了解更多的這樣的功能以及句,段或是頁結束的描述,我們可以輸入C-h f (describe-function)然後輸入功能名.
我們還要兩個功能可以回到匹配的括號處,這個分別叫做forward-sexp,backward-sexp.這在編程的時候顯得更爲有用.我們可以將他們綁定到Meta-左鍵和Meta-右鍵.爲了做到這一點我們可以將下面的兩句加入我們的.emacs文件中:
(global-set-key [(meta left)] 'backward-sexp)
(global-set-key [(meta right)] 'forward-sexp)
有時我們可以通過指定的數字回到指定的行.這個可以使用goto-line命令,在XEmacs中我們可以通過M-g來做到,而在Emacs中我們也想要這樣的做就要將下面的一句加入到我們的.emacs文件中:
(global-set-key [(meta g)] 'goto-line)
如果我們的窗口比較的亂或者是我們要將光標入在窗口的中央,我們可以按下C-l (recenter).這樣就會重繪我們的窗口並將光標放在窗口的中部而不改變他在緩衝區中的位置.
剪切,複製,粘貼:
爲標記我們要剪切或是複製的區域,我們可以使用鼠標或是鍵盤.
通過下面的例子我們可以學會如何使用用鼠標標記區域並將這個區域複製到剪粘板(在Emacs中稱爲kill-ring):
1將鼠標放在我們要標記的文本的開頭
2按下鼠標左鍵同時拉動鼠標直到我們要複製的文本的結尾
3鬆開鼠標
4如果我們要將這些文本複製到剪刀粘板,也就是說並不從緩衝區中刪除,選擇編輯菜單並選擇複製.如果我們要將這些剪切到剪切板中,也就是從緩衝區中刪除,可以到編輯菜單中選擇剪切.
當然如果我們在Emacs中操作,Linux中的複製方式也是同樣適用的.
下面的例子可以使我們學會如何標記並複製區域文本:
1 將光標放在我們要選擇的文本的開頭.
2 按下Ctrl+Spacebar,在緩衝下部就會顯示出文本標記
3 到我們要選擇的文本的結尾處.
4
如果我們要複製到剪切板,我們可以按下M-w(kill-ring-save),如果我們要剪切,我們可以按下C-w(kill-region)
而我們最經常的做法卻是使用鼠標來標記文本區域然後使用鍵盤來來進行剪切或是複製的操作.雖然在一開始看來這些鍵盤綁定比較難於記憶,但是我們還要是試着來這樣做,因爲這樣的方法會使得我們和Emacs的交互更加的方便和快速.
我們可以使用鼠標或是鍵盤來進行文本的粘貼.如果要使用鼠標我們只是簡單的在我們要粘貼文本的地方按下鼠標中鍵.要使用鍵盤,我們要將光標放在我們要粘貼文本的地方然後按下C-y
Emacs 不僅會保存最後一次的選擇而且會保存以前的一些文本的選擇.這就使得我們將一些舊的選擇放入我們的緩衝區中.要粘貼一箇舊的文本選擇,我們可以按下C- y,這就會將最一次的文本選擇粘貼到緩衝區中.然後我們按下M-y(yank-pop),這就會用將倒數第二次的文本選擇插入我們的緩衝區中.接下來的 M-y可以用更舊的文本選擇來替換.
如果我們在C-y和M-y之間按下其他的鍵,我們就不可能得到一些更舊的文本選擇了.
如果我們正在使用GNU
,位於選擇和粘貼之後.然而在XEmacs中卻是不可以的.
除 了命令C-w(kill-region),還有其他的一些命令可以刪除緩衝區中的文本並將其放在剪切板中.最常用一個命令就是C-k(kill- line),他會將從當前光標處直到本行結束的文本移除並放入剪切板中.我們可以多次按下這個鍵,這樣就可以移除多行文本並將其加入剪切板中.這樣如果我 們粘貼文本,所有的行就會做爲一個整體進行操作.
我們在以前還談到C-d命令可以刪除下一個字符.這樣另兩個比較有用的命令就是M-d(kill-word)刪除後一個單詞,而M-DEL可以刪除前一個單詞(backward-kill-word).這兩個命令都可以將刪除的文本放入剪切板中.
另一個比較簡單的插入方法就是插入一個文件夾.我們可以通過C-x i來做到.
編輯文件:
在Emacs中編輯一個文件最簡單的方法就是我們在啓動Emacs時用我們要編輯的文件名作爲參數.當我們的Emacs正在運行時,我們可以通過C-x C-f來裝入一個文件.
Emacs會將當前緩衝區的路徑作爲我們的開始路徑.這個原因就是在大部的時間裏我們要打開的文件與我們的當前編輯的文件處在同一個文件夾中.如果我們要查找的文件位於另一個文件夾中,我們可以編輯這個給定的路徑.
雙 斜線(//)表明Emacs會忽略到當前點的內容並將剩餘行的內容理解爲從文件系統的根目錄開始的路徑.與其相同的/~/表明會忽略到當前點的內容並將此 行剩餘的內容理解爲我們當前主目錄下的目錄路徑.有時我們要打開一個位於其他文件夾中的文件,這樣的方式就顯得更爲有用了.
如果我們所指定的文件並不在我們的硬盤上,Emacs就會將其理解爲我們要編輯的新文件的名字.所以新建一個文件與打開一個並不存在的文件是相同的.當我們打開了一個並不存在的文件,Emacs會通過在minibuffer顯示信息來提示我們這是一個新的文件.
下面也許是我們會打開一個並不存在的文件的原因:
1 我們要編輯一個新的文件.
2 我們輸入了錯誤的文件名,也就是我們實際要編輯的是另一個文件.
在後一種情況下,我們要通過命令C-x k(kill-buffer)來殺掉爲新文件所打開的緩衝區,然後再打開我們要編輯的文件.一個更好的辦法就是我們可以按下C-x C-v (find-alternate-file),這個方法會同時完成上面的兩步操作.
在這裏我們要注意的就是在Emacs裝入或是打開一個文件被稱爲finding a file.這是由於歷史的原因.所以裝入文件的命令是find-file而不是load-file.
要 保存緩衝區,我們可以簡單的使用C-x C-s (save-buffer).這樣Emacs就會將當前緩衝區中的內容保存到我們原始裝入的文件中.如果當前的緩衝區並沒有與一個裝入的文件相匹配,也就 是說如果我們要將我們的啓動Emacs時看到的初始緩衝區的內容寫入一個文件,Emacs就會詢問文件名.
也許有的時候我們會需要讀入一個文件而希望將其以另一個文件名進行保存,這時C-x
就 不能滿足我們的要求了,因爲這個命令會將我們的緩衝區保存到我們讀入的文件中而不會詢問另一個文件名.在這樣的情況下我們可以使用C-x C-w (write-file),這樣Emacs就會詢問一個文件名並將緩衝區中的內容存入另一個文件中.如果我們正在編輯一個我們並沒有從某一個文件讀入的緩 衝區時,我們也可以使用這樣的方法來保存我們的工作.也就是說我們的打開我們的Emacs,然後輸入了一些內容,我們就可以用這樣的方法來保存我們所輸入 的內容.當我們完成我們的編輯工作,我們可以通過C-x C-c (save-buffers-kill-emacs).如果在我們的緩衝區中存在一些我們的並沒有保存的內容,Emacs就會詢問我們的是否要先保存這些 內容.
多種多樣的文件命令:
在這一部分我們將會學習如何來編輯一個位於遠程機器人上的文件和如何來編輯一個壓縮文件.如果我們確實是很匆忙的,我們可以先跳過這一部分,但是我們的一定要回過頭看一下這一部的內容,因爲在這裏有一些非常有用的信息.
Emacs允許我們編輯位於遠程機器上的文件,也許我們會想到下面的兩點:
1 我們要使用一些特殊的語法來告訴Emacs文件的位置.
2 當我們要裝入或是保存文件時,我們要使Emacs聯接到遠程的主機.
要從另一個主機上裝入文件,我們要完成下面的兩件事:
1 文件所在的主機名.
2 我們在這個主機上的用戶名.
然後Emacs就會使用FTP聯接來下載我們要編輯的文件.
在這裏我們要注意的是如果我們要使用這個特徵我們必須允許FTP聯接到遠程的主機.
要 使Emacs裝入位於其他主機上的文件,我們可以簡單的使用這些我們已經知道的在我們的本地打開文件的命令.我們已經瞭解了C-x C-f (find-file)和C-x C-v (find-alternate-file).作爲文件名,我們要指定我們在遠程主機上的用戶名,我們可以用下面的語法:
/usr@host:filename
這個語句的構成爲:斜線,用戶名,標記@,主機名,冒號,文件名.
例如如果我們要以root的身分裝入linux.homenet主機上的/etc/passwd文件我們可以輸入:
/[email protected]:/etc/passwd
如果我們在遠程主機上的用戶名與我們當前機器上的用戶名相同,我們可以省略usrnme@部分.例如我們要編輯linux.homenet主機用戶目錄下的.tcshrc文件,我們可以這樣來做:
/linux.homenet:~/.tcshrc
在這裏我們要注意的就是~代表我們在遠程主機上的用戶主目錄.
當Emacs聯接到遠程的主機上以後,minibuffer就會顯示要我們的輸入密碼.
Emacs還可以編輯壓縮的文件或是文檔,也就說以.gz,.Z,.tar,.zip,.arc,.lzh,.zoo文件擴展名的文件.這就可以在我們的磁盤空間相對較低的情況下避免解壓文件.
一個名爲jka-compr的庫可以在Emacs中加入編輯壓縮文件的功能,這個功能可以做到透明(Transparent)的讀取和寫入由gzip或是compress壓縮的文件.在這裏透明意味着事實上我們並沒有注意到這是一個壓縮的文件.
Emacs可以識別的壓縮文件必須是以.gz,.Z,.tgz爲擴展名的文件.最後一個擴展名的文件是用tar歸檔,用gzip壓縮的文件.
當我們裝入一個壓縮文件時,Emacs在向我們顯示文件之前進行簡單的解壓.當我們保存文件時,他會在將這個文件寫入硬盤時進行壓縮.所以對我們來說是透明的.要加入這個特性,我們要在我們的.emacs文件中加入下面的幾句:
(require 'jka-compr)
(jka-compr-install)
如果我們並沒有使用XEmacs,那麼我們可以不加入第二行.
當 我們裝入一個歸檔文件時,Emacs會向我們顯示出這個歸檔文件中的文件列表.Tar歸檔文件是由一個叫做tar-mode的庫來處理的,而 Zip,Arc,Lzf,Zoo歸檔文件是由名爲arc-mode的庫來處理的.這就意味着這兩個歸檔文件的設置接口是有一些不同的.
當光標位於某一個文件上時我們敲入回車,這個文件就會被裝入緩衝區,這時我們就可以編輯這個文件.當我們進行保存時,歸檔文件會自動進行更新.
然而對tar歸檔文件來說這並不是完全正確的,要更新tar文件,我們需要保存包含有tar歸檔文件的緩衝區.
在菜單中有許多不同的函數功能可以處理這些歸檔文件:我們從這個歸檔文件中複製文件或是向這個歸檔文件中是複製文件,重命名文件或是更改文件的權限等等.
文檔模板:
Emacs 的一個主要的哲學就是我們應將我們的時間花在有意義地方,而不是去那些瑣碎無變化的任務(One of the main philosophies of Emacs is that you should spend your time being a genius instead of doing trivial monotonous tasks!).如果我們在使用Emacs時可以記住這一點,我們就會發現我們所要做的事情Emacs可以會較少的敲擊鍵盤或是根本不用敲擊鍵盤就可以完 成這些工作.
這其中的一個例子就是新建一個文件.當我們創建一個新文件時,大多數的情況下我們的最初的幾分鐘會花費在插入一些文本,而這些文本是我們在上一次創建一個類似的文件時插入過的,例如,我們上一次創建的是一個HTML文檔.
對 這個問題的一個解決辦法就是使Emacs插入一個模板.這個模板會根據我們是否寫C程序,HTML文檔或是寫給奶奶的信而有所不同.更進一步說,HTML 文件的設置模板是與其他的文件模板不同的.我們個人主頁的HTML文件也許會不同於我們爲我們的公司設計的文件.或者說是一個程序的模板會不同於另一個.
當 我們創建一個新文件時,Emacs會根據文件的擴展名來查找相應的模板.也就是說當我們的創建了一個名爲test.html的文件,Emacs就會查找一 個名爲TEMPLATE.html.tpl的模板.而如果我們創建是一個名爲letter.txt的文件,Emacs就會查找名爲 TEMPLATE.txt.tpl的模板.
當要找一個模板時,Emacs首先會在新文件所在的目錄下進行查找,如果Emacs沒有找 到,Emacs就會在名爲Templates的子目錄下進行查找.如果仍然沒有找到,Emacs就會在父目錄和名爲Templates的子目錄下進行查 找.Emacs以這樣的方式進行查找直到我們的用戶主目錄的頂部.如果Emacs仍然沒有找到,Emacs就會在我們有可能已經定了模板的地方進行查找.
例如,如果我們的創建了一個名爲~/work/Emacs-project/note.txt的文件而我們所有的標準模板位於目錄~/lib/template目錄下.Emacs就會以下面的方式進行查找:
1.~/work/Emacs-project/TEMPLATE.txt.tpl
2.~/work/Emacs-project/Templates/TEMPLATE.txt.tpl
3.~/work/TEMPLATE.txt.tpl
4.~/work/Templates/TEMPLATE.txt.tpl
5.~/TEMPLATE.txt.tpl
6.~/Templates/TEMPLATE.txt.tpl
7.~/lib/templates/TEMPLATE.txt.tpl
也許我們會很奇怪這樣的查找方式,然而這樣的方式由於下面的原因是相當的重要的:
1.通過在當前目錄和Templates子目錄中進行查找,我們就有時會在一個子目錄中隱藏我們的模板,因爲我們不希望這些模板與其他的文件混在一起.換句說我們並不必須這樣的來做.
2 通過這樣的路徑進行查找,我們也許會在子目錄或是上一級目錄中找到特殊的模板.例如也許我們有一個名爲Letters的目錄,在這個目錄中存放着我們所有 的信件.在這個目錄下也許我們會放一個普通的模板,這個模板會插入一些類似Dear...的話以及當前的日期.而在一個Letter的子目錄中我們也許會 存放一些寫給我們的男朋友或是女朋友的信.這個模板會插入一些類似Yours forever的話.
3通過最後在標準的模板目錄中進行查找,我們就會查找到所有的通用模板.
模 板可以包含一些由標準行(stand-ins)所組成的文本.這些行可能被其他的文本替換或是當基於這個模板創建一個新文件時在緩衝區中進行標記.標準行 的格式爲(>>>letter<<<),例如>>>P<<<設置當我們的新建 一個文檔時位於緩衝區中的這一點,>>>A<<<可以插入我們的郵件地址.
下面列出一些不需用戶定義的代碼:
代碼        例子    描述
文件和目錄類:
(>>>DIR<<<)        ~/Letters/    文件名部分目錄
(>>>FILE<<<)        Gretchen.txt    沒有目錄的文件名
(>>>RILE_RAW<<<)    Gretchen    沒有擴展名的文件名
(>>>EILE_EXT<<<)    txt        文件名的擴展名(沒有逗點)
時間日期類:
(>>>DATE<<<)        07 Jan 1999
            20:17:29    日期和時間
(>>>ISO_DATE<<<)    1999-01-07    ISO 8601 日期
系統信息類:
(>>>AUTHOR<<<)        [email protected]    完整Email地址
(>>>LOGIN_NAME<<<)    blackie        登陸名
(>>>HOST_ADDRE<<<)    ifad.dk        主機名
(>>>USER_NAMEE<<<)    Jesper         用戶真名
位置類:
(>>>POINT<<<)                這個設置點,當然只有這個點可以進行設置
(>>>MARKT<<<)                設置標記,只有標記可以進行設置
(>>>1<<<) (>>>9<<<)
十個可能的位置.要到達這些位置中的任何一個,我們可以按下C-x j(jump-to-register)
一個例子模板如下:
            Odense (I<<<)
Dear (>P<<<)
 
 
Our record number: (>1<<<)
 
Cheers (>U<<<)    
在我們的模板中,我們也可以插入詢問問題的答案.所以在我們的前面的例子中,我們也許希望提示我們要在插在Dear後的名字.如下面的模板:
Odense (>>>I<<<)
Dear (>>>name<<<)
(>>>P<<<)
 
 
Our record number: (>>>number<<<)
 
Cheers (>>>U<<<)
 
>TEMPLATE-DEFINITION-SECTION<<
("name" "What is the name of the customer? ")
("number" "What is the record number? ")
要使Emacs詢問我們問題,我們需要插入一行來表明開始了定義的部分.在這行後的文本是用來定義問題的,所以我們要小心不要插入沒有語法的文本.
每一個問題都是與一個單詞相聯繫的.這個單詞是作爲標準的輸入文本.
這樣當我們打開一個新的文件時,Emacs會向我們詢問問題,而我們的答案也就會插入相應的地方.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章