⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.html

📁 介绍linux下文件和设备编程
💻 HTML
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp; M-x cd<p>然後, 建立tag table.<br>tag table 就是一张对照表, 记录哪个符号(variable/function call)<br>对映到哪个档案的哪个地方. 有这张表, emacs可以让我们快速的在程<br>式码内游走. 一般这张表是一个档案, 叫作TAGS (大写)<p>&nbsp;&nbsp; M-! etags *.[ch]<p>M-! 是执行external shell command的意思. etags就是emacs的建表程式.<br>你只要告诉它你的source code在那□即可.<p>vi的话是使用ctags这个程式, 它建出来的档名叫tags (小写). 因为<br>我们介绍emacs, 所以不管它.<p>然後, 怎麽看程式? 你知道所有的C 程式都是由main()开始, 所以你想<br>找到main()在哪个档案. 这时只要按&nbsp; M-. 然後emacs会问你tag table<br>在哪里. 因为我们已经cd到该目录, 直接按enter就好了. 然後输入main,<br>emacs就会把你带到main(){ ... }去.<p>如果 你看到某个程式片断呼叫一个你没看过的函式, 你可以把游标<br>移到该函式的名字上, M-. ENTER 就搞定了.<p>如果 emacs找错了 (比如有变数和函式同名, emacs跳到变数去),<br>那你可以用 C-u M-. 找下一个.<p>在编辑程式码的时候, M-SPC 很有用, 它会把游标附近的空白缩成一个.<br>在其它地方也有效.<p>Emacs的一些package:<p>M-x dired&nbsp; (或C-x d)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 游走/编辑 目录, 就是档案总管的意思 :)<p>M-x man&nbsp;&nbsp; 就是man page<br>M-x shell 开个command prompt, 不过不能跑vi,elm, tin...<br>M-x gnus&nbsp; 读新闻/读信<br>M-x rmail 读信<br>M-x vm&nbsp;&nbsp;&nbsp; view mail<br>M-x mh-rmail 读信 (package mh-e)<br>M-x mh-smail 送信 (package mh-e)<p>强列建议改用emacs读news/bbs. 世界会更美好!<p>读信的话就要看你的感觉. 这些读信程式都会把信从系统的mail folder<br>搬到自己的目录下, 占用quota, 我不喜欢 :p 建议elm或mutt.<br>除非参加mailling list配合procmail. 不然不实用.<br>用mh-e 须要装mh 这个外部程式, 不太好. 建议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 经过多年的发展,已成为完整的self-documenting系统.<br>很多东西都可以线上找到你要的资讯.<p>前面说过,或者你已经不小心按backspace遇到了, C-h (就是backspace<br>的ascii码) 在emacs里面是help的意思, 它可以带出一串指令.<br>常用的有:<p>&nbsp;&nbsp; C-h F&nbsp;&nbsp; Emacs FAQ<br>&nbsp;&nbsp; C-h t&nbsp;&nbsp; Emacs 使用教学<br>&nbsp;&nbsp; C-h n&nbsp;&nbsp; Emacs NEWS file, 介绍最近改版的新功能<br>&nbsp;&nbsp; C-h i&nbsp;&nbsp; Info system. Info是gnu用来取代man page的系统,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本上和文字模示的WWW差不多. 有许多重要的资讯<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以在这边找到. 如果你是新手, 建议你在x-win下<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看. 不然, 按键 m (menuitem), SPC next page<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l (last node: node就是章节的意思) u (up node)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d (directory, 索引). BS (Backspace, back a page).<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果全部只按SPC, 就跟man 一样.<br>&nbsp;&nbsp; C-h k&nbsp;&nbsp; describe key, 告诉你按这个键执行那个lisp function.<br>&nbsp;&nbsp; C-h f&nbsp;&nbsp; describe function. 告诉你function在作什麽.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果只按SPC, emacs会给你所有lisp 函数的列表, 和说明.<br>&nbsp;&nbsp; C-h v&nbsp;&nbsp; describe variable 同function.<br>&nbsp;&nbsp; C-h a&nbsp;&nbsp; apropos的意思(approximate).&nbsp; 给lisp function的部份<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字串, emacs帮你找.<br>&nbsp;&nbsp; C-h b&nbsp;&nbsp; 列出目前所有的keybinding<br>&nbsp;&nbsp; C-h m&nbsp;&nbsp; mode help. 列出目前的mode的特殊说明.<br>&nbsp;&nbsp; C-c C-h 列出以C-c 开头的所有key-binding. 虽然说Emacs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以定义按键, 可是Ctrl- 开头的所有组合大概都用光了,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只有C-c算是可以自定指令. 不过有些mode也侵犯这个空间.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前的convention是C-c &lt;chr&gt; 留给user, C-c C-&lt;chr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 留给package.<p>有以上这些help, 你的emacs/elisp功力会随著时间成长.<p><br>Elisp 简介:<p>Emacs有三份手册.第一份是使用手册, 第二份是Elisp 手册, 第三份是<br>Elisp 简介.&nbsp; 第三份的程度是入门级, 值得看. Elisp手册其实也写的<br>很简单, 还教你lisp, 不过有点长, 适合参考.<p>因为我lisp没有仔细学过, 所以:<br>以下所言, 如有巧合, 那才是真的.<p>Basic data type<br>&nbsp; 字串 (string) &quot;Hello, World&quot;<br>&nbsp; 字元 (char)&nbsp; ?a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; 问号开头<br>&nbsp; atom &amp; list:<br>&nbsp;&nbsp;&nbsp;&nbsp; (1 2 3 4)&nbsp; 是一个list, 由 4个 atom 组成.<br>&nbsp; pair:&nbsp; 中间是句点.<br>&nbsp;&nbsp;&nbsp;&nbsp; (apple . 2)<br> alist (associated list)<br>&nbsp;&nbsp;&nbsp;&nbsp; 就是一堆 pair的集合,就像perl/tcl的associative array.<br>&nbsp;&nbsp;&nbsp;&nbsp; 或者说是一个资料库, 一堆 (key, value) pair.<br>&nbsp;&nbsp;&nbsp;&nbsp; '((Apple&nbsp;&nbsp;&nbsp;&nbsp; . 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Orange&nbsp;&nbsp;&nbsp; . 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PineApple . 3))<br>&nbsp; vector (?)<br>&nbsp;&nbsp;&nbsp;&nbsp; emacs 19用vector 来表示按键(key strok sequence)<br>&nbsp;&nbsp;&nbsp;&nbsp; [f1] [f2] [f1 a]<p>&nbsp; nil&nbsp; 就是空的list, 或者表示 false<br>&nbsp; t&nbsp;&nbsp;&nbsp; true<br>Forms<br>&nbsp; 我们写程式最好有样版让我们填空最简单了.<br>&nbsp; Form 就是样版, 不过意义不太一样.<br>&nbsp; Form 就是Elisp 可以接受的句型.<br>&nbsp; lisp 解译器 预设是对list的每个元素求值(evaluate),<br>&nbsp; 除非是 special form, 有特殊的定义. 比如说<p>&nbsp; (defun FUNC (ARG-LIST)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY ...)<br> 就是一个special form, 用来定义函式, 所以FUNC 不会被<br>&nbsp; 求值, 被当成symbol, ...<p>&nbsp; (quote (LIST))<p>&nbsp; 这也是个special form, 叫 lisp 把 (LIST)当做symbol就好了,<br>&nbsp; 不要 evaluate.<p>&nbsp; quote 很常用, 所以有个缩写:<br>&nbsp; '(LIST)&nbsp; 等於 (quote (LIST))<br>&nbsp; 'Asymbol 可以表示一个Atom, 名称叫Asymbol<p>&nbsp; set 可以产生/定义新的变数.<br>&nbsp; (set 'hello 1)<br>&nbsp; ; hello = 1<br>&nbsp; ; 注意我们用 'hello, 所以lisp不会evaluate hello的值.<p>&nbsp; 这家伙很常用, 也有简写.<br>&nbsp; (setq hello 1)<br>&nbsp; setq 就是set quote 的缩写. 这是个 special form, 不会对<br>&nbsp; 第二个元素求值.<br>valuation<p>在Emacs下, C-x C-e 可以执行(evaluate, 求值)游标左边的叙述.<br>结果会出现在minibuffer.<p>lisp-interaction-mode中 C-j 可以evaluate, 并且把结果append到 buffer.<p>lisp 程式由一堆list 构成.称为expression.<br>每个expression 都回传回一个值.<br>有些expression有副作用, 如删掉一个字.<br>&nbsp; (这跟C 的int delete_char() 意思一样, 它传回int,<br>&nbsp;&nbsp; 并且删掉某个char)<p>定义函式:<p>(defun NAME (ARGS-LIST)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;注解&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; optional<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (interactive)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; optional<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY)<p>定义一个叫NAME的函式. BODY 是一堆expression.<br>注解是用来给C-h f显示的.<br>(interactive) 表示这个函示会和user/buffer作用.<br>(interactive &quot;B&quot;) 表示执行此函式先问user一个buffer的名字,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然後当作参数传给它. (如, 当user透过key-binding<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者 M-x 呼叫此函式时)<br>(interactive &quot;BAppend to buffer: \nr&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问user buffer name时, 提示号 Append to buffer:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此function有两个引数,第一个是B, 就是buffer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二个是r, region<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用\n 隔开.<br>(interactive &quot;p&quot;) 用C-u 设的prefix 把它当作参数传给我.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 预设值==4. C-u C-f 向右移四个字<p>一些lisp 函式:<p>(list 1 2 3 4)&nbsp;&nbsp; 产生 '(1 2 3 4)<br>(car '(1 2 3 4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>(cdr '(1 2 3 4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(2 3 4)<br>(cons 1 '(2 3 4))&nbsp;&nbsp;&nbsp;&nbsp; '(1 2 3 4)<br>(cons 1 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1 . 2)<br>(cons 0 (cons 1&nbsp; (cons 2 nil)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等於&nbsp; '(0 1 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {list 是用 pair 串起来的,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用C 表示:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pair: {Object *first, Object *second};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(pair[i].first) == i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pair[i].second == pair[i+1]; }<p>(cons '(1 2) '(3 4))&nbsp; '((1 2) 3 4)<br>(setq a 1)<br>(1+ a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; a+1<br>(+ 2 a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; a+2<br>(* 1 2 3 4)<br>(current-buffer)&nbsp; ; 传回目前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 &quot;Hello&quot;)&nbsp;&nbsp; ; 在minibuffer显示Hello<br>(if (test)<br>&nbsp;&nbsp;&nbsp;&nbsp; (then-part)<br>&nbsp;&nbsp;&nbsp;&nbsp; (else-part))<br>(cond ((test1) BODY1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((test2) BODY2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (t&nbsp; OTHER-WISE)<br>(let ((var1 value)&nbsp; ; local variable<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; no value<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (var3 value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BODY ...)<br>(lambda (ARG-LIST) ...) 同 defun, 但是没有名字 (anonymous).<br>可以存到变数去:<br>(setq hello (lambda () (message &quot;Hello,World&quot;)))<br>(funcall hello)<br>(goto-char (point-max))<br>(defvar VAR VALUE &quot;*注解&quot;) 如果VAR 不存在才定义. 有注解可以用<br>&nbsp;&nbsp; C-h v 看. 注解打*号表是使用者可以直接改/ 这个变数本来就是<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给使用者设定用的.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以用 M-x edit-options 来线上设定 (emacs结束就没有了,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过edit-options可以给你所有可修改的变数的列表,你可以<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放到.emacs档内.<p>(directory-files &quot;./&quot; t &quot;\\..*&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a list of files under directory X<br>(load &quot;xxxx.el&quot;)&nbsp; 同#include &lt;stdio.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给使用者设定用的.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以用 M-x edit-options 来线上设定 (emacs结束就没有了,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过edit-options可以给你所有可修改的变数的列表,你可以<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放到.emacs档内.<p>(directory-files &quot;./&quot; t &quot;\\..*&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a list of files under directory X<br>(load &quot;xxxx.el&quot;)&nbsp; 同#include &lt;stdio.h&gt;<br>(setq load-path (cons &quot;~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -