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

📄 emacs--order.txt

📁 Emacs命令集,详细介绍Emacs各类命令,使用方法,还有功能,它们之间的区别
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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.first) == i; 
           pair.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 下皆有差异)



基本命令
C-x C-c : 退出Emacs 

C-x C-f : 打开一个文件,如果文件不存在,则创建一个文件 

C-g : 取消未完成的命令 

编辑
C-z (redefined): Undo;原来C-z是挂起Emacs(然后用fg命令调出);C-x u 是默认的命令; 移动一下光标,再C-z就可以redo 

M-d : 删除光标后的词语 

移动光标
C-v : 向前翻页 

M-v : 向后翻页 

M-r : 将光标移动到屏幕中间那行 

C-a : 移到行首 

M-a : 移到句首,从行首到句首之间可能有空格 

C-e : 移到行尾 

M-e : 移到句尾 

M-{ : 向上移动一段 

M-} : 向下移动一段 

C-right : 向前移动一个单词 

C-left : 向后移动一个单词 

C-up : 向前移动一段 

C-down : 向后移动一段 

M-< : 移到整个文本开头 

M-> : 移到整个文本末尾 

C-u 数字 命令 : 执行多次(数字表示次数)该命令;“M-数字 命令” 也可以 

M-x goto-line : 移动到某一行 

C-l : 重绘屏幕,效果就是当前编辑行移动窗口中央 

Buffer 相关
C-x k : 关闭当前buffer 

C-x b : 切换到前一个编辑的buffer 

C-x C-b : 列出当前所有buffer 

C-x C-s : 保存当前buffer 

C-x s : 保存所有未保存的buffer,会提示你是否需要保存 

C-x C-w : 文件另存为 

拷贝与粘贴
M-space (redefined): 设置mark; C-@ 是默认命令 

C-w (redefined) : 剪切一块区域;如果没有设置mark,则是剪切一行 

M-w (redefined) : 拷贝一块区域;如果没有设置mark, 则是拷贝一行 

C-k : 从当前位置剪切到行尾 

C-y : 粘贴 

M-y : 用C-y拉回最近被除去的文本后,换成 M-y可以拉回以前被除去的文本。键入多次的M-y可以拉回更早以前被除去的文本。 

C-x r k : 执行矩形区域的剪切 

C-x r y : 执行矩形区域的粘贴 

窗口操作
C-x 0 : 关闭当前窗口 

C-x 1 : 将当前窗口最大化 

C-x 2 : 垂直分割窗口 

C-x 3 : 水平分割窗口 

M-o (redefined) : 在窗口之间切换; C-x o 是默认命令 

C-x 5 1/2/3/0 : 对frame类似的操作 

C-x < : 窗口内容右卷 

C-x > : 窗口内容左卷(这两个命令在垂直分割窗口后比较有用) 

(C-u) C-x ^ : 加高当前窗口,如果有C-u,则每次加高4行 

(C-u) C-x } : 加宽当前窗口 

(C-u) C-x { : 压窄当前窗口 

ESC C-v : 在其它窗口进行卷屏操作 

搜索和替换
C-s : 向前搜索(增量式搜索);连续C-s,跳到下一个搜索到的目标 

C-s RET : 普通搜索 

C-r : 向前搜索 

C-s RET C-w : 按单词查询 

M-% : 查询替换,也就是替换前会询问一下 

M-x replace-string : 普通替换 

Tags
M-! etags .c .h : 创建TAGS文件 

M-. : 跳到tag所在位置 

M-x list-tags : 列出tags 

Bookmark
C-x r m : 设置书签bookmark 

C-x r b : 跳到bookmark处 

帮助
C-h ? : 查看帮助信息 

C-h f : 查看一个函数 

C-h v : 查看一个变量 

C-h k : 查看一个键绑定 (C-h c 也是查看键绑定,但是信息较简略) 

C-h C-f : 查看一个函数的Info,非常有用 

C-h i : 看Info 

其它
C-M-\ : 对选中区域,按照某种格式(比如C程序)进行格式化 

C-x h : 全部选中 

M-! : 执行外部shell命令 

M-x shell : 模拟shell的buffer 

M-x term : 模拟terminal, C-c k 关闭terminal 

C-x C-q : 修改buffer的只读属性 

⌨️ 快捷键说明

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