EMACS手冊

Emacs使用手冊

Emacs 啓動: 
直接打emacs, 如果有X-windows就會開視窗. 如果不想用X 的版本, 
就用 emacs -nw      (No windows)起動. 
 
符號說明 
C-X 表示按住CTRL鍵, 然後按X, 再把CTRL, X一起放開. 
M-X         META                 META 
 
 在沒有META鍵的電腦上, M-X 等於先按 ESC鍵, 接著按 X鍵. 
 Sun上面META鍵就是菱形的那個鍵. 
 有些系統META鍵就是ALT鍵.(或者某一邊的ALT鍵) 
 
 C-X或 M-X的X沒有大小寫分別. 
Emacs按鍵命令基本上是一串C-<chr>和M-<chr>組成的. 
超過兩個以上的按鍵命令, Emacs會在螢幕最下面一行顯示你按過什麼. 
這一行叫作mini buffer 
 
結束Emacs按 C-x C-c 
 
取消執行 C-g 
有些Emacs命令會跑很久, 可以用C-g中斷之. 按錯鍵也可以按C-g取消. 
 
上下移動   C-p 向上 (previous line) C-n向下(next line) 
左右移動   C-f 向右 (forward) C-b 向左 (backward) 
 
   其實Emacs內部沒有行的概念, 把一篇文章放在一個大buffer 
   裏面, 所以C-f (forward)就是向檔尾移動, C-b (backward) 
   是移回去的意思, 一次一個字. 
 
翻頁  下一頁 C-v (view next screen) 
      上一頁 M-v  
 
   翻頁時,上一頁末尾會留一點在螢幕最上面,以維持連續性.  
 
Emacs在遊標接近螢幕最下方時會自動跳半頁, 把檔案往前挪一點, 
方便閱讀. 
 
重畫螢幕 C-L 
 
Emacs裏面遊標的專有名詞叫point. point == 遊標目前的 點 
 
遊標一次跳一個字(word) M-f  往後跳 M-b 
 
  注意 C-f 與 M-f, C-b 與 M-b的對稱性. 
 
移到行頭 C-a  行尾 C-e 
移到句首 M-a  到句尾 M-e 
  (M-a 到上一個句點後面,一個句子的起頭. 
   M-e 到句點後面) 
 
移到檔頭 M-< 檔尾 M-> 
 
刪除遊標目前指的/後面的字 C-d 
        前面的字 DEL  (Delete鍵) 
DEL的正名叫Rubout (Rub out) 
 
M-DEL 往回刪一個字(word) 
M-d   往前刪 (遊標後面) 
C-k   刪至行尾 (kill) 
M-k   刪到一句子結尾(刪到句點) (kill) 
 
 
注意Backspace = C-h 在Emacs下是help的意思 
後面有(kill)的, 表示此刪除的動作是kill, 不太等於delete. 
emacs會把kill掉的東西放到kill ring去, 算是一種暫存的地方, 
以後可以叫出來.見 yank說明. 
 
 
Undo: C-x u 
C-_ 等於 C-x u    有些DEC終端機, C-/就是C-_ 
                  有時等於C-Shift- - 
 
重複執行 
 
舉例, 向右移 8個字, C-u 8 C-f 
C-u 在Emacs裏是蠻特別的,用來設定一些引數(argument/repeat count) 
給其後的命令. 
 
C-u 2 0 C-n 向下移 20行 
 
有一個特別的例外, C-u 3 C-v 不是翻三頁, 而是整個螢幕向上移三行. 
據說這比較有意義. 
 
C-u 1 0 C-x u   UNDO 10次 
 
給C-L一個引數會怎麼樣: 
C-u 0 C-l 會重畫螢幕,並且把目前的行移到螢幕第一行. 
 
另外, C-u 100   等於 M-100 
      C-u 數字  等於 M-數字 
 
X windows 下,  
C-left C-right 一次移一個字(word). 
C-up C-down 移動一段 (paragraphs/C語言的話是block) 
Home = C-a 
End = C-e 
C-Home = M-< 
C-end = M-> 
PgUp PgDn = M-v C-v 
設定重覆次數更加簡單, 
比如要向右移10個字 C-1 C-0 right-arrow 
  就是按住CTRL, 然後打10就對了, 比 C-u 1 0 簡單. 
 
Mouse中鍵用來選取有hi-light的地方. 
     右鍵是menu-button 
 
如果不小心按兩次ESC, 等於 M-ESC,  會有一個訊息跑出來 
說你按到一個被disable的命令. 這是高級指令, 作者認爲 
初學者用不道,所以會問你要不要啓動它, 一般回答no. 
 
如果某一行太長, 螢幕顯示不下, Emacs會在螢幕最右邊打個$, 
表示此行未完,右邊還有. 
 
把一行拆成兩行: 在想拆處按Enter即可. 
合併兩行爲一行: 在行尾按C-d (或行首按DEL) 
 
Yank: 吐出被刪掉的(killed)東西. 
 
只要用kill (C-k, M-k等) 刪除, 超過一個字的資料, 
emacs就會把它存起來, 然後C-y 可以把它叫出來. 
功能跟Cut & Paste一樣. Kill 和delete不一樣, 只有被 
kill掉的東西才能用yank吐回來. 
 
遊標在同一地方不動, 連續kill掉的資料會被當成一次kill掉的, 
yank時會一起回來. 
 
被Kill掉的資料是放在稱作 kill ring的資料結構上面, ring就是個圓圈, 
被kill掉的東西會依序擺在圓圈上. yank 會放回最近一次kill掉的資料. 
如果不是你想要的話, 用M-y 可以換.  (M-y就是告訴emacs, 不對不對, 
我不是要這一個,換前一個給我). 
 
M-y 要緊接在C-y之後. 
 
拷貝文字的方法== 連續 C-k 幾次,  把要拷貝的行全部刪掉, 
然後按 C-y 弄回來. 再到想複製的地方按一次C-y, 就成了. 
 
把要拷貝的資料kill掉在yank回來好像很笨. 是有比較文明的 
方法, 那就是M-w, 不過較麻煩. 
 
首先,要先設標記. Mark 用 C-SPC 或 C-@ 設. 然候 
把遊標移到另一端, 按 M-w 就可以把 mark 到 point間的 
字存到kill ring上. point 就是遊標的意思. 
 
Emacs不會把Mark起來的地方用highlight表示, 除非在X下. 
在X下, 可以用M-w 來拷貝用滑鼠反白的文字. 
 
kill & yank 就是 cut & paste的意思. 
 
 
以上大部份指令對Bash的命令列編輯也有效 
 
檔案操作 
讀檔: Emacs術語叫 finding a file. 
C-x C-f 然後在mini-buffer輸入檔名. 輸入檔名時, SPC鍵有 
 auto-complete的功能,或者會秀出到目前爲止檔名前幾 
個字和輸入一樣的. (TAB鍵也有類似功能) 
 
C-x C-f 叫 find-file 
 
C-x C-s 存檔 (save current file, save current buffer) 
C-x s   存所有的檔 
 
C-x i   插入檔案  把另外的檔案的內容讀入目前編輯區內 
   
視窗 
Emacs把檔案讀進來,存在buffer中. 
我們透過window來看/編輯buffer. 
 
兩個視窗會把螢幕切成兩部份, 他們可以同時顯示 
相同的, 或不同的檔案. 
 
對初學者而言, 最需要的是記住怎樣讓不想要的視窗消失: 
 
C-x 0 關掉目前的視窗 
C-x 1 會讓目前的視窗佔滿整個螢幕 (One Window), 
      取消/關掉其他的視窗. 
 
Emacs裏面有許多功能都會開一個小視窗來和使用者溝通, 顯示訊息. 
有時候不會自動消失很討厭, C-x 1 就很有用. 
 
另一個功能是如何跳到另一個視窗. 
C-x o  (other-window) 
 
 
C-x 2 把目前的視窗切成兩個 (水平分割) 
C-x 3                      (垂直分割) 
C-x 4 是一串與視窗有關的指令. 
C-x 4 是一串與視窗有關的指令. 
C-x 5 則是擴展到X的視窗, 稱爲frame. 
      C-x 5 2 就是再開另一個X視窗 (frame). 
 
 
多檔編輯 
C-x C-b 看目前有那些buffer (buffer就是emacs放開起的檔案的地方). 
C-x b 然後在minibuffer輸入buffer的名字,可以切換編輯buffer. 
      TAB鍵也有作用. 有些內部的buffer (就是沒有檔案的buffer), 
      是用*開頭和結束, 這個也要打, 如*scratch* 
 
最候提醒: 
  C-x 1 可以把多餘的視窗關掉. 
 
 
Emacs擴充指令 
 
前面介紹的emacs按鍵大部份都是C-<chr> 或者 M-<chr>的形式. 
這是最簡單的按法, 由一對按鍵構成一個指令. 
 
Emacs的按鍵可以超過2個以上. 如 C-x 1 或 C-x C-b. 
一般超過一個按鍵組合的命令都是用C-x 開頭. 
 
另外你也可以直接下命令. 按 M-x 之後就可以打一個Emacs命 
令來執行. 一般這些命令名字都很長, 不過都不常用. 等一下 
我們會介紹一些. 還有介紹怎麼把這些命令設成按鍵指令. 
 
C-x C-c 就是結束Emacs. 不過一般Emacs很笨重, 一旦起動就不輕易 
退出. 所以比較常用的是C-z 
 
C-z 把Emacs暫停, 回到命令列. 當你下次再需要編輯時,打fg %emacs 
就可以把Emacs喚醒. 
 
在X下, C-z會把emacs縮成icon 
 
 
mode line 
 
emacs編輯畫面由 編輯區(buffer) 狀態列 (modeline) 和對話區 (minibuffer) 
構成. 這裏解釋 modeline 顯示的訊息. 
 
以下是個範例: 
 
   --**-XEmacs: xemacs.qs      (Fundamental)----74%------- 
 
由後面往前解釋, 74% 表示遊標的位置. 
 
(Fundamental)表示編輯模式.這是最原始的模式. 編輯不同種類的文章 
可能希望用不同的模式, 比如說C-mode, lisp-mode, tex-mode, text-mode 
等等. 在不同模式下可能多一些按鍵出來. 舉例text-mode. 
      M-x text-mode 
可以切入text-mode, 這是一般人編輯文字使用的模式. 和Fundamental mode 
沒什麼差異. 不過遊標移動時, Emacs對一個字的定義就有所不同, 因而 
M-f M-b 等移動一個字, 一個段落的指令就可能會停在標點符號的前面. 
此時狀態列變爲... (Text)----70%--- 
 
以上說的是Major mode. 另外還有minor mode, 其實就是一些額外的功能. 
比如說, M-x auto-fill-mode 則狀態列顯示 (Text Fill). 
auto-fill就是自動斷行, 讓文章每行固定有70個字. 
 
M-X fundamental-mode 可以變回來. 
 
這裏要說明一下, emacs在 minibuffer下有auto-completion的功能, 
也就是打M-x fund 然後按 SPC, 它會自動補全 fundamental-mode, 
不用全打. 如果有兩個以上的選擇, 它會告訴你. 這個功能對 
find-file (C-x C-f)等等檔案編輯功能也有效. 前面提過. 
最後解釋兩個**號. 右邊的*表示文章被修改過了. 
左邊的* 表示這個編輯區(buffer)可以修改. 
有一些emacs的buffer是read-only buffer, 就會標成% 
%%表示檔案是read-only. 
 
C-x C-q 可以解開read-only的鎖定, 無論如何你要改這個編輯區. 
這是個toggle指令, 如果原來是可以修改的, C-x C-q會把它切成 
read-only. 
 
 
Search 
 
沒有Search 功能的編輯器簡直就是小朋友的玩具. Search 
是一項很重要的功能, 所以emacs也提供的很完善. 
 C-s 
 C-r 
 M-x re-search-forward 
 M-x re-search-backward 
 M-x search-forward 
 M-x search-backward 
以上這些指令是基本的search指令. C-s, C-r是increamental search, 
就是你打字的同時, emacs就直接幫你找. 一個是forward, 一個是backward. 
找到了怎麼辦? 按C-g可以取消搜尋, 跳回原來的位置. 按Enter就讓遊標 
停在找到的地方 -- 此時minibuffer顯示:Mark saved where search started 
什麼意思? 就是isearch幫你在原來的位置設了一個mark, 然後把point 
(cursor) 移到新的位置. 
想跳回去原先的地方? 
C-x C-x 就可以了.(exchange-point-and-mark) 
C-u C-SPC 可以依序跳回前幾次設mark的地方. 
  (C-SPC是設mark, 給它一個argument, 就是反動作) 
  (還記不記得C-u 可以給後面的指令設一些參數. 
   有些指令拿這個參數來當作repeat count, 
   有些指令就只拿來當作on/off, true/false, set/clear而已) 
 
M-x re-search-forward可以讓你用regular expression搜尋. 
M-x search-forward則沒有increamental的功能. 
 
另外一個指令, 作用和grep很像: 
M-x occure 
 
和search相提並論的就是replace. 
M-x replace 然後按 SPC, 就知道了. 
 
Emacs的設定: 
 
Emacs的設定檔是 $HOME/.emacs 
你應該多少知道, emacs是用lisp寫成的編輯器, .emacs檔也都是 
要用lisp的語法設定. emacs用的lisp稱爲elisp, 和一般的lisp差一點點. 
 
有一個info page, emacs-lisp-intro, 深入淺出的介紹emacs lisp. 
如果你還不會, 不懂programming, 強烈建議你看這份文件. 如果你 
會texinfo, 你可以把它很漂亮的印出來. (內容一點點而已, 兩三 
天就看完了) 
 
如果你把.emacs搞砸了, 進emacs很奇怪, 怎麼辦? 
 1. 用 vi 改 .emacs :> 
 2. emacs -q 進 emacs 
 
 
Major Modes 
 
一般常見的emacs major mode有 
  fundamental-mode 
    text-mode 
    lisp-mode   有自動對括號/重排, 直接執行lisp code功能. 
    c-mode/cc-mode c-mode是比較舊的c-mode, cc-mode應該是 
                目前新的c-mode. 有自動重排/對括號的功能. 
                也可以在emacs內compile, 跳到compiler error 
                修正錯誤. 執行程式時debug. (配合dbx/gdb) 
                compile是透過Makefile進行. 
    tex-mode    Tex/Latex編輯模示. 可能是打一些奇怪的標點 
                符號比較方便. 
    <programming-language>-mode 
                同lisp/cc-mode. 如果是interpreter的話, 
                emacs通常都可以直接執行/debug. 
    <programming-language>-mode還有tags的功能, 後述. 
 
    html-mode, texinfo-mode, sgml-mode: 編寫html, texi, sgml之用. 
    w3-mode     WWW browser. 在x-win上不滿意,但可以接受... 
 
 
Tags 
 
Tags 是一個顯爲人知的功能? 所以我想提一下. 這不是emacs發明的, 
而是vi 原本的特異功能. emacs只是發揚光大而已. 
假設你有一個目錄, 裏面是一個程式的原始碼, 比如說, tin 的原始碼, 
放在 ~/tin-1.3beta 下面. 你想看它們. 
 
首先, 叫emacs cd到該目錄: 
    M-x cd 
 
然後, 建立tag table. 
tag table 就是一張對照表, 記錄哪個符號(variable/function call) 
對映到哪個檔案的哪個地方. 有這張表, emacs可以讓我們快速的在程 
式碼內遊走. 一般這張表是一個檔案, 叫作TAGS (大寫) 
 
   M-! etags *.[ch] 
 
M-! 是執行external shell command的意思. etags就是emacs的建表程式. 
你只要告訴它你的source code在那□即可. 
 
vi的話是使用ctags這個程式, 它建出來的檔名叫tags (小寫). 因爲 
我們介紹emacs, 所以不管它. 
 
然後, 怎麼看程式? 你知道所有的C 程式都是由main()開始, 所以你想 
找到main()在哪個檔案. 這時只要按  M-. 然後emacs會問你tag table 
在哪裏. 因爲我們已經cd到該目錄, 直接按enter就好了. 然後輸入main, 
emacs就會把你帶到main(){ ... }去. 
 
如果 你看到某個程式片斷呼叫一個你沒看過的函式, 你可以把遊標 
移到該函式的名字上, M-. ENTER 就搞定了. 
 
如果 emacs找錯了 (比如有變數和函式同名, emacs跳到變數去), 
那你可以用 C-u M-. 找下一個. 
 
在編輯程式碼的時候, M-SPC 很有用, 它會把遊標附近的空白縮成一個. 
在其它地方也有效. 
 
Emacs的一些package: 
 
M-x dired  (或C-x d) 
          遊走/編輯 目錄, 就是檔案總管的意思 :) 
 
M-x man   就是man page 
M-x shell 開個command prompt, 不過不能跑vi,elm, tin... 
M-x gnus  讀新聞/讀信 
M-x rmail 讀信 
M-x vm    view mail 
M-x mh-rmail 讀信 (package mh-e) 
M-x mh-smail 送信 (package mh-e) 
 
強列建議改用emacs讀news/bbs. 世界會更美好! 
 
讀信的話就要看你的感覺. 這些讀信程式都會把信從系統的mail folder 
搬到自己的目錄下, 佔用quota, 我不喜歡 :p 建議elm或mutt. 
除非參加mailling list配合procmail. 不然不實用. 
用mh-e 須要裝mh 這個外部程式, 不太好. 建議vm 或 gnus. 
寫完信, C-c C-c 就可以送信. 
 
如果你的資料用rcs/sccs作版本管理, emacs自動會起動version control 
(minor mode.), c-x c-q 變成check-in/check-out. 
 
如何取得更多的資訊: 
 
Emacs的lisp 經過多年的發展,已成爲完整的self-documenting系統. 
很多東西都可以線上找到你要的資訊. 
 
前面說過,或者你已經不小心按backspace遇到了, C-h (就是backspace 
的ascii碼) 在emacs裏面是help的意思, 它可以帶出一串指令. 
常用的有: 
 
   C-h F   Emacs FAQ  
   C-h t   Emacs 使用教學 
   C-h n   Emacs NEWS file, 介紹最近改版的新功能 
   C-h i   Info system. Info是gnu用來取代man page的系統, 
           基本上和文字模示的WWW差不多. 有許多重要的資訊 
           可以在這邊找到. 如果你是新手, 建議你在x-win下 
           看. 不然, 按鍵 m (menuitem), SPC next page 
           l (last node: node就是章節的意思) u (up node) 
           d (directory, 索引). BS (Backspace, back a page). 
           如果全部只按SPC, 就跟man 一樣. 
   C-h k   describe key, 告訴你按這個鍵執行那個lisp function. 
   C-h f   describe function. 告訴你function在作什麼. 
           如果只按SPC, emacs會給你所有lisp 函數的列表, 和說明. 
   C-h v   describe variable 同function. 
   C-h a   apropos的意思(approximate).  給lisp function的部份 
           字串, emacs幫你找. 
   C-h b   列出目前所有的keybinding 
   C-h m   mode help. 列出目前的mode的特殊說明. 
   C-c C-h 列出以C-c 開頭的所有key-binding. 雖然說Emacs 
           可以定義按鍵, 可是Ctrl- 開頭的所有組合大概都用光了, 
          只有C-c算是可以自定指令. 不過有些mode也侵犯這個空間. 
           目前的convention是C-c <chr> 留給user, C-c C-<chr> 
           留給package. 
 
有以上這些help, 你的emacs/elisp功力會隨著時間成長. 
 
 
Elisp 簡介: 
 
Emacs有三份手冊.第一份是使用手冊, 第二份是Elisp 手冊, 第三份是 
Elisp 簡介.  第三份的程度是入門級, 值得看. Elisp手冊其實也寫的 
很簡單, 還教你lisp, 不過有點長, 適合參考. 
 
因爲我lisp沒有仔細學過, 所以: 
以下所言, 如有巧合, 那纔是真的. 
 
Basic data type 
  字串 (string) "Hello, World" 
  字元 (char)  ?a               ; 問號開頭 
  atom & list: 
     (1 2 3 4)  是一個list, 由 4個 atom 組成. 
  pair:  中間是句點. 
     (apple . 2)     
 alist (associated list) 
     就是一堆 pair的集合,就像perl/tcl的associative array. 
     或者說是一個資料庫, 一堆 (key, value) pair. 
     '((Apple     . 1) 
       (Orange    . 2) 
       (PineApple . 3)) 
  vector (?) 
     emacs 19用vector 來表示按鍵(key strok sequence) 
     [f1] [f2] [f1 a] 
 
  nil  就是空的list, 或者表示 false 
  t    true 
Forms 
  我們寫程式最好有樣版讓我們填空最簡單了. 
  Form 就是樣版, 不過意義不太一樣. 
  Form 就是Elisp 可以接受的句型. 
  lisp 解譯器 預設是對list的每個元素求值(evaluate), 
  除非是 special form, 有特殊的定義. 比如說 
 
  (defun FUNC (ARG-LIST) 
      BODY ...) 
 就是一個special form, 用來定義函式, 所以FUNC 不會被 
  求值, 被當成symbol, ... 
 
  (quote (LIST)) 
 
  這也是個special form, 叫 lisp 把 (LIST)當做symbol就好了, 
  不要 evaluate. 
 
  quote 很常用, 所以有個縮寫: 
  '(LIST)  等於 (quote (LIST)) 
  'Asymbol 可以表示一個Atom, 名稱叫Asymbol 
 
  set 可以產生/定義新的變數. 
  (set 'hello 1) 
  ; hello = 1   
  ; 注意我們用 'hello, 所以lisp不會evaluate hello的值. 
 
  這傢伙很常用, 也有簡寫. 
  (setq hello 1) 
  setq 就是set quote 的縮寫. 這是個 special form, 不會對 
  第二個元素求值. 
valuation 
 
在Emacs下, C-x C-e 可以執行(evaluate, 求值)遊標左邊的敘述. 
結果會出現在minibuffer. 
 
lisp-interaction-mode中 C-j 可以evaluate, 並且把結果append到 buffer. 
 
lisp 程式由一堆list 構成.稱爲expression. 
每個expression 都回傳回一個值. 
有些expression有副作用, 如刪掉一個字. 
  (這跟C 的int delete_char() 意思一樣, 它傳回int, 
   並且刪掉某個char) 
 
定義函式: 
 
(defun NAME (ARGS-LIST) 
      "註解"                  ; optional 
      (interactive)           ; optional 
      BODY) 
 
定義一個叫NAME的函式. BODY 是一堆expression. 
註解是用來給C-h f顯示的. 
(interactive) 表示這個函示會和user/buffer作用. 
(interactive "B") 表示執行此函式先問user一個buffer的名字, 
              然後當作參數傳給它. (如, 當user透過key-binding 
              或者 M-x 呼叫此函式時) 
(interactive "BAppend to buffer: \nr") 
             問user buffer name時, 提示號 Append to buffer: 
             此function有兩個引數,第一個是B, 就是buffer 
             第二個是r, region 
             用\n 隔開. 
(interactive "p") 用C-u 設的prefix 把它當作參數傳給我. 
                  預設值==4. C-u C-f 向右移四個字 
 
一些lisp 函式: 
 
(list 1 2 3 4)   產生 '(1 2 3 4) 
(car '(1 2 3 4)       1 
(cdr '(1 2 3 4)       '(2 3 4) 
(cons 1 '(2 3 4))     '(1 2 3 4) 
(cons 1 2)            (1 . 2) 
(cons 0 (cons 1  (cons 2 nil))) 
                等於  '(0 1 2) 
      {list 是用 pair 串起來的, 
       用C 表示: 
           pair: {Object *first, Object *second}; 
           *(pair[i].first) == i; 
           pair[i].second == pair[i+1]; } 
 
(cons '(1 2) '(3 4))  '((1 2) 3 4) 
(setq a 1) 
(1+ a)        ; a+1 
(+ 2 a)       ; a+2 
(* 1 2 3 4)    
(current-buffer)  ; 傳回目前buffer的資料物件 
(switch-to-buffer (other-buffer)) 
(set-buffer) 
(buffer-size) 
(setq current-pos (point)) 
(point-min) 
(point-max) 
(message "Hello")   ; 在minibuffer顯示Hello 
(if (test) 
     (then-part) 
     (else-part)) 
(cond ((test1) BODY1) 
      ((test2) BODY2) 
      (t  OTHER-WISE) 
(let ((var1 value)  ; local variable 
       var2             ; no value 
        (var3 value) 
        ...) 
        BODY ...) 
(lambda (ARG-LIST) ...) 同 defun, 但是沒有名字 (anonymous). 
可以存到變數去: 
(setq hello (lambda () (message "Hello,World"))) 
(funcall hello) 
(goto-char (point-max)) 
(defvar VAR VALUE "*註解") 如果VAR 不存在才定義. 有註解可以用 
   C-h v 看. 註解打*號表是使用者可以直接改/ 這個變數本來就是 
             給使用者設定用的. 
             可以用 M-x edit-options 來線上設定 (emacs結束就沒有了, 
             不過edit-options可以給你所有可修改的變數的列表,你可以 
             放到.emacs檔內. 
 
(directory-files "./" t "\\..*") 
         return a list of files under directory X 
(load "xxxx.el")  同#include <stdio.h> 
             給使用者設定用的. 
             可以用 M-x edit-options 來線上設定 (emacs結束就沒有了, 
             不過edit-options可以給你所有可修改的變數的列表,你可以 
             放到.emacs檔內. 
 
(directory-files "./" t "\\..*") 
         return a list of files under directory X 
(load "xxxx.el")  同#include <stdio.h> 
(setq load-path (cons "~/emacs" load-path)) ; load的search path. 
(autoload ...) 不像load會直接evaluate 整個檔案, 而是需要時再 
               load. 
(local-unset-key [(control c)]) 
(local-set-key [(control c) a] 'forward-sexp) 
sexp 就是一個expession, n個expression如果用括號括起來就算一個. 
      (expression的定義隨語言的不同而有不同, 在C, lisp 
        tex, html, fortran 下皆有差異) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章