BBS水木清华站∶精华区

发信人: fkbch (心魔@笨愚斋), 信区: Linux        
标  题: EMACS 速成 (转载) 
发信站: BBS 水木清华站 (Thu Apr 22 19:22:47 1999) 
 
【 以下文字转载自 FreeBSD 讨论区 】 
【 原文由 pure 所发表 】 
这篇文章, 希望能有更多人喜欢 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                   
        
   
     里面,                                                     
        
   
  (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.           
        
-- 
看着她笑,他忽然觉得她好寂寞好寂寞。 
她静静的看了他半天,才柔柔慢慢的:「 你好像已经找到了。」 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.112.103.235] 

BBS水木清华站∶精华区