注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

【Copy】Emacs移动光标  

2008-12-28 21:47:01|  分类: L-Emacs |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
from:http://mingtaoli.blogbus.com/
  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:
      其实 defun 可以被看作最高一级的 sexp。所以范围小一点的移动操作就是在同级 sexp 之间移动。
      C-M-f   到下一个同级语法结构
      C-M-b 到上一个同级语法结构

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

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

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

    3. 进入和退出子结构。

      在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 不放,所以还是很顺手的。

    4. 段落:
      M-} (forward-paragraph)
      M-{ (backward-paragraph)
      段落在不同的mode有不同的含义,它的含义是由 paragraph-start 变量决定的。这个正则表达式可以告诉 Emacs 那些符号出现被认为是一个段落开始了。
    5. 句子:
      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]*")
      这样中文的句子就可以被正确识别了。
  3. 一些特殊模式专有的移动方式。
    • HTML 模式。
      1. 跳过同一级 tag。
        C-c C-f  向前跳过同一级 tag (sgml-skip-tag-forward)
        C-c C-b 向后跳过同一级 tag (sgml-skip-tag-backward)
    • LaTeX 模式。
        C-c C-u   到最近的上一级 \begin{...} 处。
        C-c }     到最近的上一级匹配 {...} 处。
  评论这张
 
阅读(435)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017