Emacs学习路线图(二)----之基本命令篇

来源:互联网 发布:linux 删除全部.svn 编辑:程序博客网 时间:2024/05/01 16:25

 Emacs学习路线图(二)----之基本命令篇

 

2. Emacs基本命令篇

网络上有很多的教程,这里不详细叙述,参考一些资料略微的总结如下(因为是自己学习过程看的资料的一些笔记汇总,

可能某些内容是摘自哪位仁兄的手笔,现在已经记不得了,如果你看到了某个部分是你写的,请发信给我,我会添加上去的,谢谢)。

符号说明:
C-X 表示按住CTRL键, 然後按X, 再把CTRL, X一起放开.
M-X  在没有META键的电脑上, M-X 等於先按 ESC键, 接著按 X键.
Sun上面META键就是菱形的那个键.
有些系统META键就是ALT键.(或者某一边的ALT键)

 

1)Emacs移动光标的命令总结

  1. 基本操作。
    • C-f, C-b: 以字符为单位移动。
    • M-f, M-b: 以单词为单位移动。
    • C-a, C-e: 移动到行首,行末。
    • M-m: 移动到第一个非空格字符。(back-to-indentation)
    • M-a, M-e: 移动到句子头,句子尾。
    • M-{, M-}: 移动到段落头,段落尾。
    • C-v, M-v: 翻页。
    • M-<, M->: 到文件头和文件尾。
    • M-r: 加参数,移动到窗口里的某一行。不加参数缺省移动到窗口中间。
    • M-x goto-char: 到文件的第 N 字节。
    • M-x goto-line: 到文件第 N 行。
    • C-x C-n: 设定 goal-column.
    • C-u C-x C-n: 取消 goal-column.
  2. 以语法结构为单位移动。

    文档一般都有各种结构,比如LISP里有S表达式,C语言里的函数,LaTeX 里的 /begin{...}.../end{...} ... 如果我们能够已文档的语法单位来移动,就会使操作非常高效。

    1. defun。defun 在 LISP 里就是最高一级的 sexp,而在 C 语言里,它的含义就是函数。 C-M-a 到 defun 头
      C-M-e 到 defun 尾
      这样,我们在C语言程序里可以一个函数一个函数的跳过。也可以从一个函数中间一下跳到函数开头或末尾。
    2. 语法单位(sexp)。语法单位在各种 major mode 有不同的定义:
      • lisp-mode: 一个S表达式。
      • c-mode: 一个变量名,一个 (...), 一个 {...}, 一个 [...], ...

        所以在 Emacs 里,寻找匹配的括号可以在括号处使用 C-M-f 和 C-M-b.

      • Gnus: 一个thread。包括所有的 Re:
    3. 其实 defun 可以被看作最高一级的 sexp。所以范围小一点的移动操作就是在同级 sexp 之间移动。 C-M-f 到下一个同级语法结构
      C-M-b 到上一个同级语法结构

      注意,这种移动不能越过语法结构的边界而进入上一级结构。所以,你如果在

      for (i=0; i<10; i++) { ...} 的 for 循环的括号里向右移动,到达右边括号时,就会被提示到达边界。

      注意,文档中的注释在这两个操作中会被跳过,这是非常方便的。

    4. 进入和退出子结构。

      在LISP中,S表达式是嵌套的括号,进入子结构就是进入到这一级 (...) 里面。而在 C 语言中,进入子结构就是进入 (...), {...}, [...] 的里面。 C-M-d: 进入到下一级结构里。C-M-u: 进入到上一级结构里。

      C-M-a, C-M-e, C-M-f, C-M-b, C-M-d, C-M-u 这几个命令组合起来可以迅速的在程序里移动。往往手可以按住 C-M 不放,所以还是很顺手的。

    5. 段落: M-} (forward-paragraph)
      M-{ (backward-paragraph)
      段落在不同的mode有不同的含义,它的含义是由 paragraph-start 变量决定的。这个正则表达式可以告诉 Emacs 那些符号出现被认为是一个段落开始了。
    6. 句子: M-e (backward-sentence)
      M-a (forward-sentence)

      句子在不同的模式有不同的含义。比如在 c-mode, “句子”成为了“语句”的代名词,所以 M-a 和 M-e 可以以语句为单位移动。

      句子的含义是由 sentence-end 变量决定的。这个正则表达式可以告诉 Emacs 那些符号出现被认为是一个句子结束了……比如我的 sentence-end 是这样设置的:

      (setq sentence-end "//([。!?]//|……//|[.?!][]/"')}]*//($//|[ /t]//)//)[ /t/n]*") 这样中文的句子就可以被正确识别了。

2)文件操作

C-x C-s 保存
C-x C-w 另存为
C-x C-f 打开文件
C-x C-r 只读方式打开
C-x C-v 读入另外一个文件代替当前buffer的文件
C-x s   保存所有
C-x i   将文件的内容插入
M-x revert-buffer    恢复到原始状态

 

3)查找与替代(replace);

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

C-s RET : 普通搜索

C-r : 向前搜索

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

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

M-x replace-string : 普通替换

 

4)编辑
M-u       后面单词变为大写
M-l       后面单词变为小写
M-c       后面单词的首字母变大写
M-/       补全
C-j       从当前位置分成两行,相当于RET + tab
M-(       插入()
C-q tab   插入tab
C-q C-m   插入^M
M-;       插入注释
C-o       回车

 

5)窗口操作

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 : 在其它窗口进行卷屏操作

 

6)帮助信息

C-h ? : 查看帮助信息

C-h f : 查看一个函数

C-h v : 查看一个变量

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

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

C-h i : 看Info

 

7)拷贝与粘贴

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 : 执行矩形区域的粘贴

 

在比较熟悉了emacs命令之后,就可以开始进入下一步学习emacs lisp了

(二)完

(三)(四)待续