?? 2.html
字號:
M-x cd<p>然後, 建立tag table.<br>tag table 就是一張對照表, 記錄哪個(gè)符號(variable/function call)<br>對映到哪個(gè)檔案的哪個(gè)地方. 有這張表, emacs可以讓我們快速的在程<br>式碼內(nèi)游走. 一般這張表是一個(gè)檔案, 叫作TAGS (大寫)<p> M-! etags *.[ch]<p>M-! 是執(zhí)行external shell command的意思. etags就是emacs的建表程式.<br>你只要告訴它你的source code在那□即可.<p>vi的話是使用ctags這個(gè)程式, 它建出來的檔名叫tags (小寫). 因?yàn)?lt;br>我們介紹emacs, 所以不管它.<p>然後, 怎麼看程式? 你知道所有的C 程式都是由main()開始, 所以你想<br>找到main()在哪個(gè)檔案. 這時(shí)只要按 M-. 然後emacs會問你tag table<br>在哪里. 因?yàn)槲覀円呀?jīng)cd到該目錄, 直接按enter就好了. 然後輸入main,<br>emacs就會把你帶到main(){ ... }去.<p>如果 你看到某個(gè)程式片斷呼叫一個(gè)你沒看過的函式, 你可以把游標(biāo)<br>移到該函式的名字上, M-. ENTER 就搞定了.<p>如果 emacs找錯(cuò)了 (比如有變數(shù)和函式同名, emacs跳到變數(shù)去),<br>那你可以用 C-u M-. 找下一個(gè).<p>在編輯程式碼的時(shí)候, M-SPC 很有用, 它會把游標(biāo)附近的空白縮成一個(gè).<br>在其它地方也有效.<p>Emacs的一些package:<p>M-x dired (或C-x d)<br> 游走/編輯 目錄, 就是檔案總管的意思 :)<p>M-x man 就是man page<br>M-x shell 開個(gè)command prompt, 不過不能跑vi,elm, tin...<br>M-x gnus 讀新聞/讀信<br>M-x rmail 讀信<br>M-x vm view mail<br>M-x mh-rmail 讀信 (package mh-e)<br>M-x mh-smail 送信 (package mh-e)<p>強(qiáng)列建議改用emacs讀news/bbs. 世界會更美好!<p>讀信的話就要看你的感覺. 這些讀信程式都會把信從系統(tǒng)的mail folder<br>搬到自己的目錄下, 占用quota, 我不喜歡 :p 建議elm或mutt.<br>除非參加mailling list配合procmail. 不然不實(shí)用.<br>用mh-e 須要裝mh 這個(gè)外部程式, 不太好. 建議vm 或 gnus.<br>寫完信, C-c C-c 就可以送信.<p>如果你的資料用rcs/sccs作版本管理, emacs自動會起動version control<br>(minor mode.), c-x c-q 變成check-in/check-out.<p>如何取得更多的資訊:<p>Emacs的lisp 經(jīng)過多年的發(fā)展,已成為完整的self-documenting系統(tǒng).<br>很多東西都可以線上找到你要的資訊.<p>前面說過,或者你已經(jīng)不小心按backspace遇到了, C-h (就是backspace<br>的ascii碼) 在emacs里面是help的意思, 它可以帶出一串指令.<br>常用的有:<p> C-h F Emacs FAQ<br> C-h t Emacs 使用教學(xué)<br> C-h n Emacs NEWS file, 介紹最近改版的新功能<br> C-h i Info system. Info是gnu用來取代man page的系統(tǒng),<br> 基本上和文字模示的WWW差不多. 有許多重要的資訊<br> 可以在這邊找到. 如果你是新手, 建議你在x-win下<br> 看. 不然, 按鍵 m (menuitem), SPC next page<br> l (last node: node就是章節(jié)的意思) u (up node)<br> d (directory, 索引). BS (Backspace, back a page).<br> 如果全部只按SPC, 就跟man 一樣.<br> C-h k describe key, 告訴你按這個(gè)鍵執(zhí)行那個(gè)lisp function.<br> C-h f describe function. 告訴你function在作什麼.<br> 如果只按SPC, emacs會給你所有l(wèi)isp 函數(shù)的列表, 和說明.<br> C-h v describe variable 同function.<br> C-h a apropos的意思(approximate). 給lisp function的部份<br> 字串, emacs幫你找.<br> C-h b 列出目前所有的keybinding<br> C-h m mode help. 列出目前的mode的特殊說明.<br> C-c C-h 列出以C-c 開頭的所有key-binding. 雖然說Emacs<br> 可以定義按鍵, 可是Ctrl- 開頭的所有組合大概都用光了,<br> 只有C-c算是可以自定指令. 不過有些mode也侵犯這個(gè)空間.<br> 目前的convention是C-c <chr> 留給user, C-c C-<chr><br> 留給package.<p>有以上這些help, 你的emacs/elisp功力會隨著時(shí)間成長.<p><br>Elisp 簡介:<p>Emacs有三份手冊.第一份是使用手冊, 第二份是Elisp 手冊, 第三份是<br>Elisp 簡介. 第三份的程度是入門級, 值得看. Elisp手冊其實(shí)也寫的<br>很簡單, 還教你lisp, 不過有點(diǎn)長, 適合參考.<p>因?yàn)槲襩isp沒有仔細(xì)學(xué)過, 所以:<br>以下所言, 如有巧合, 那才是真的.<p>Basic data type<br> 字串 (string) "Hello, World"<br> 字元 (char) ?a ; 問號開頭<br> atom & list:<br> (1 2 3 4) 是一個(gè)list, 由 4個(gè) atom 組成.<br> pair: 中間是句點(diǎn).<br> (apple . 2)<br> alist (associated list)<br> 就是一堆 pair的集合,就像perl/tcl的associative array.<br> 或者說是一個(gè)資料庫, 一堆 (key, value) pair.<br> '((Apple . 1)<br> (Orange . 2)<br> (PineApple . 3))<br> vector (?)<br> emacs 19用vector 來表示按鍵(key strok sequence)<br> [f1] [f2] [f1 a]<p> nil 就是空的list, 或者表示 false<br> t true<br>Forms<br> 我們寫程式最好有樣版讓我們填空最簡單了.<br> Form 就是樣版, 不過意義不太一樣.<br> Form 就是Elisp 可以接受的句型.<br> lisp 解譯器 預(yù)設(shè)是對list的每個(gè)元素求值(evaluate),<br> 除非是 special form, 有特殊的定義. 比如說<p> (defun FUNC (ARG-LIST)<br> BODY ...)<br> 就是一個(gè)special form, 用來定義函式, 所以FUNC 不會被<br> 求值, 被當(dāng)成symbol, ...<p> (quote (LIST))<p> 這也是個(gè)special form, 叫 lisp 把 (LIST)當(dāng)做symbol就好了,<br> 不要 evaluate.<p> quote 很常用, 所以有個(gè)縮寫:<br> '(LIST) 等於 (quote (LIST))<br> 'Asymbol 可以表示一個(gè)Atom, 名稱叫Asymbol<p> set 可以產(chǎn)生/定義新的變數(shù).<br> (set 'hello 1)<br> ; hello = 1<br> ; 注意我們用 'hello, 所以lisp不會evaluate hello的值.<p> 這家伙很常用, 也有簡寫.<br> (setq hello 1)<br> setq 就是set quote 的縮寫. 這是個(gè) special form, 不會對<br> 第二個(gè)元素求值.<br>valuation<p>在Emacs下, C-x C-e 可以執(zhí)行(evaluate, 求值)游標(biāo)左邊的敘述.<br>結(jié)果會出現(xiàn)在minibuffer.<p>lisp-interaction-mode中 C-j 可以evaluate, 并且把結(jié)果append到 buffer.<p>lisp 程式由一堆list 構(gòu)成.稱為expression.<br>每個(gè)expression 都回傳回一個(gè)值.<br>有些expression有副作用, 如刪掉一個(gè)字.<br> (這跟C 的int delete_char() 意思一樣, 它傳回int,<br> 并且刪掉某個(gè)char)<p>定義函式:<p>(defun NAME (ARGS-LIST)<br> "注解" ; optional<br> (interactive) ; optional<br> BODY)<p>定義一個(gè)叫NAME的函式. BODY 是一堆expression.<br>注解是用來給C-h f顯示的.<br>(interactive) 表示這個(gè)函示會和user/buffer作用.<br>(interactive "B") 表示執(zhí)行此函式先問user一個(gè)buffer的名字,<br> 然後當(dāng)作參數(shù)傳給它. (如, 當(dāng)user透過key-binding<br> 或者 M-x 呼叫此函式時(shí))<br>(interactive "BAppend to buffer: \nr")<br> 問user buffer name時(shí), 提示號 Append to buffer:<br> 此function有兩個(gè)引數(shù),第一個(gè)是B, 就是buffer<br> 第二個(gè)是r, region<br> 用\n 隔開.<br>(interactive "p") 用C-u 設(shè)的prefix 把它當(dāng)作參數(shù)傳給我.<br> 預(yù)設(shè)值==4. C-u C-f 向右移四個(gè)字<p>一些lisp 函式:<p>(list 1 2 3 4) 產(chǎn)生 '(1 2 3 4)<br>(car '(1 2 3 4) 1<br>(cdr '(1 2 3 4) '(2 3 4)<br>(cons 1 '(2 3 4)) '(1 2 3 4)<br>(cons 1 2) (1 . 2)<br>(cons 0 (cons 1 (cons 2 nil)))<br> 等於 '(0 1 2)<br> {list 是用 pair 串起來的,<br> 用C 表示:<br> pair: {Object *first, Object *second};<br> *(pair[i].first) == i;<br> pair[i].second == pair[i+1]; }<p>(cons '(1 2) '(3 4)) '((1 2) 3 4)<br>(setq a 1)<br>(1+ a) ; a+1<br>(+ 2 a) ; a+2<br>(* 1 2 3 4)<br>(current-buffer) ; 傳回目前buffer的資料物件<br>(switch-to-buffer (other-buffer))<br>(set-buffer)<br>(buffer-size)<br>(setq current-pos (point))<br>(point-min)<br>(point-max)<br>(message "Hello") ; 在minibuffer顯示Hello<br>(if (test)<br> (then-part)<br> (else-part))<br>(cond ((test1) BODY1)<br> ((test2) BODY2)<br> (t OTHER-WISE)<br>(let ((var1 value) ; local variable<br> var2 ; no value<br> (var3 value)<br> ...)<br> BODY ...)<br>(lambda (ARG-LIST) ...) 同 defun, 但是沒有名字 (anonymous).<br>可以存到變數(shù)去:<br>(setq hello (lambda () (message "Hello,World")))<br>(funcall hello)<br>(goto-char (point-max))<br>(defvar VAR VALUE "*注解") 如果VAR 不存在才定義. 有注解可以用<br> C-h v 看. 注解打*號表是使用者可以直接改/ 這個(gè)變數(shù)本來就是<br> 給使用者設(shè)定用的.<br> 可以用 M-x edit-options 來線上設(shè)定 (emacs結(jié)束就沒有了,<br> 不過edit-options可以給你所有可修改的變數(shù)的列表,你可以<br> 放到.emacs檔內(nèi).<p>(directory-files "./" t "\\..*")<br> return a list of files under directory X<br>(load "xxxx.el") 同#include <stdio.h><br> 給使用者設(shè)定用的.<br> 可以用 M-x edit-options 來線上設(shè)定 (emacs結(jié)束就沒有了,<br> 不過edit-options可以給你所有可修改的變數(shù)的列表,你可以<br> 放到.emacs檔內(nèi).<p>(directory-files "./" t "\\..*")<br> return a list of files under directory X<br>(load "xxxx.el") 同#include <stdio.h><br>(setq load-path (cons "~
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -