📄 00000001.htm
字号:
C-h n Emacs NEWS file, 介绍最近改版的新功能 <BR> C-h i Info system. Info是gnu用来取代man page的系统, <BR> 基本上和文字模示的WWW差不多. 有许多重要的资讯 <BR> 可以在这边找到. 如果你是新手, 建议你在x-win下 <BR> 看. 不然, 按键 m (menuitem), SPC next page <BR> l (last node: node就是章节的意思) u (up node) <BR> d (directory, 索引). BS (Backspace, back a page). <BR> 如果全部只按SPC, 就跟man 一样. <BR> C-h k describe key, 告诉你按这个键执行那个lisp function. <BR> C-h f describe function. 告诉你function在作什麽. <BR> 如果只按SPC, emacs会给你所有lisp 函数的列表, 和说明. <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也侵犯这个空间. <BR> 目前的convention是C-c <chr> 留给user, C-c C-<chr> <BR> 留给package. <BR> <BR>有以上这些help, 你的emacs/elisp功力会随著时间成长. <BR> <BR> <BR>Elisp 简介: <BR> <BR>Emacs有三份手册.第一份是使用手册, 第二份是Elisp 手册, 第三份是 <BR>Elisp 简介. 第三份的程度是入门级, 值得看. Elisp手册其实也写的 <BR>很简单, 还教你lisp, 不过有点长, 适合参考. <BR> <BR>因为我lisp没有仔细学过, 所以: <BR>以下所言, 如有巧合, 那才是真的. <BR> <BR>Basic data type <BR> 字串 (string) "Hello, World" <BR> 字元 (char) ?a ; 问号开头 <BR> atom & list: <BR> (1 2 3 4) 是一个list, 由 4个 atom 组成. <BR> pair: 中间是句点. <BR> (apple . 2) <BR> alist (associated list) <BR> 就是一堆 pair的集合,就像perl/tcl的associative array. <BR> 或者说是一个资料库, 一堆 (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] <BR> <BR> nil 就是空的list, 或者表示 false <BR> t true <BR>Forms <BR> 我们写程式最好有样版让我们填空最简单了. <BR> Form 就是样版, 不过意义不太一样. <BR> Form 就是Elisp 可以接受的句型. <BR> lisp 解译器 预设是对list的每个元素求值(evaluate), <BR> 除非是 special form, 有特殊的定义. 比如说 <BR> <BR> (defun FUNC (ARG-LIST) <BR> BODY ...) <BR> 就是一个special form, 用来定义函式, 所以FUNC 不会被 <BR> 求值, 被当成symbol, ... <BR> <BR> (quote (LIST)) <BR> <BR> 这也是个special form, 叫 lisp 把 (LIST)当做symbol就好了, <BR> 不要 evaluate. <BR> <BR> quote 很常用, 所以有个缩写: <BR> '(LIST) 等於 (quote (LIST)) <BR> 'Asymbol 可以表示一个Atom, 名称叫Asymbol <BR> <BR> set 可以产生/定义新的变数. <BR> (set 'hello 1) <BR> ; hello = 1 <BR> ; 注意我们用 'hello, 所以lisp不会evaluate hello的值. <BR> <BR> 这家伙很常用, 也有简写. <BR> (setq hello 1) <BR> setq 就是set quote 的缩写. 这是个 special form, 不会对 <BR> 第二个元素求值. <BR>valuation <BR> <BR>在Emacs下, C-x C-e 可以执行(evaluate, 求值)游标左边的叙述. <BR>结果会出现在minibuffer. <BR> <BR>lisp-interaction-mode中 C-j 可以evaluate, 并且把结果append到 buffer. <BR> <BR>lisp 程式由一堆list 构成.称为expression. <BR>每个expression 都回传回一个值. <BR>有些expression有副作用, 如删掉一个字. <BR> (这跟C 的int delete_char() 意思一样, 它传回int, <BR> 并且删掉某个char) <BR> <BR>定义函式: <BR> <BR>(defun NAME (ARGS-LIST) <BR> "注解" ; optional <BR> (interactive) ; optional <BR> BODY) <BR> <BR>定义一个叫NAME的函式. BODY 是一堆expression. <BR>注解是用来给C-h f显示的. <BR>(interactive) 表示这个函示会和user/buffer作用. <BR>(interactive "B") 表示执行此函式先问user一个buffer的名字, <BR> 然後当作参数传给它. (如, 当user透过key-binding <BR> 或者 M-x 呼叫此函式时) <BR>(interactive "BAppend to buffer: \nr") <BR> 问user buffer name时, 提示号 Append to buffer: <BR> 此function有两个引数,第一个是B, 就是buffer <BR> 第二个是r, region <BR> 用\n 隔开. <BR>(interactive "p") 用C-u 设的prefix 把它当作参数传给我. <BR> 预设值==4. C-u C-f 向右移四个字 <BR> <BR>一些lisp 函式: <BR> <BR>(list 1 2 3 4) 产生 '(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]; } <BR> <BR>(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>可以存到变数去: <BR>(setq hello (lambda () (message "Hello,World"))) <BR>(funcall hello) <BR>(goto-char (point-max)) <BR>(defvar VAR VALUE "*注解") 如果VAR 不存在才定义. 有注解可以用 <BR> C-h v 看. 注解打*号表是使用者可以直接改/ 这个变数本来就是 <BR> 给使用者设定用的. <BR> 可以用 M-x edit-options 来线上设定 (emacs结束就没有了, <BR> 不过edit-options可以给你所有可修改的变数的列表,你可以 <BR> 放到.emacs档内. <BR> <BR>(directory-files "./" t "\\..*") <BR> return a list of files under directory X <BR>(load "xxxx.el") 同#include <stdio.h> <BR> 给使用者设定用的. <BR> 可以用 M-x edit-options 来线上设定 (emacs结束就没有了, <BR> 不过edit-options可以给你所有可修改的变数的列表,你可以 <BR> 放到.emacs档内. <BR> <BR>(directory-files "./" t "\\..*") <BR> return a list of files under directory X <BR>(load "xxxx.el") 同#include <stdio.h> <BR>(setq load-path (cons "~/emacs" load-path)) ; load的search path. <BR>(autoload ...) 不像load会直接evaluate 整个档案, 而是需要时再 <BR> load. <BR>(local-unset-key [(control c)]) <BR>(local-set-key [(control c) a] 'forward-sexp) <BR>sexp 就是一个expession, n个expression如果用括号括起来就算一个. <BR> (expression的定义随语言的不同而有不同, 在C, lisp <BR> tex, html, fortran 下皆有差异) <BR> <BR>-- <BR>以上纯属个人意见,请多多指教, PGP 检查码 <BR>Yung-Ching Hsiao (萧永庆) EBCD FCD0 AB43 845F <BR> 1D7B 2E3C 2641 721A <BR> <BR>-- <BR>================================================================ <BR>ID: dfbb NICKNAME:赵无忌 REALNAME:方汉 <BR>---------------------------------------------------------------- <BR>爱好:GAME,Linux, PC Email: <A HREF="mailto:fangh@csun01.ihep.ac.cn">fangh@csun01.ihep.ac.cn</A> <BR> 武侠,古文 Clinux Homepage:<A HREF="http://csun01.ihep.ac.cn/linux/">http://csun01.ihep.ac.cn/linux/</A> <BR>================================================================ <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: csun01.ihep.ac.] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -