2016年10月27日星期四



ace-jump-mode高效移动光标


ace-jump-mode 应该是目前为止 emacs 屏幕可见区域键盘操作移动光标(cursor)最快的方式, 没有之一 :)
刚用 emacs 的时候大都会接触 C-f/C-b/C-n/C-p 等标准的光标移动法, 实际上那些都是很低效的. 很多人可能习惯了 C-s isearch-foreard 这样的, 也还可以, 但是通常都比较低效.
"ace jump的功能,是快速的定位光标到可以见的单词或者字母上", 这个是作者 winterTTr 同学在水木社区发布 ace-jump-mode 2.0 测试版时的原话. 更准确的说 ace-jump-mode 提供的定位能力不局限于单词字母, 也可以到其他字符.
ace-jump-mode 有几种操作模式:
  • ace-jump-word-mode 按照英文语法的单词首字母(特殊字符实际也可以算单词)进行定位
  • ace-jump-char-mode 个人比较常用, 输入一个字符, 屏幕上显示出现该字符的位置, 并自动给每个位置分配一个按键, 按对应的键以后跳转到对应位置.
  • ace-jump-line-mode 快速定位到行. 实际上个人想象的一种扩展方式是定位到行以后, 自动按照列再定位一次, 这样就更通用而同样高效, 几乎可以定位到屏幕任意位置: 也解决非键盘直接输入字符, 包括中文的定位问题了.
ace-jump-mode 大部分情况下比 C-s isearch-forward 等来得高效. 当然他们功能并不完全重叠, isearch-forward 用来搜索屏幕不可见区域之外等地方还是更适用的.
有多个相关 mode 基于此拓展了:
  • ace-isearch 简单的理解, 默认安装配置好以后, C-s 搜1个字符调用 ace-jump, 2到5个单词用 isearch, 6个以及以上用 helm-swoop-from-isearch , 有些小毛病就是折叠的代码可能会被意外的展开
  • ace-jump-buffer 在当前打开的 buffer 之间以类似 ace-jump 的模式快速切换
  • ace-jump-zap zap-to-char 来删除到某个字符比较考眼力, 不是很近的容易出错, 有 ace-jump-zap 来选择就方便多了
  • ace-link 使用范围相对比较小众, 在有链接的一些 mode 比如 org-mode, info-mode eww 等中以 ace-jump 模式切换
  • ace-window 则是在 emacs 的窗口(frame/window) 之间切换, 因为只有俩窗口的时候直接跟系统的 C-x o other-window 一样, 所以可以考虑直接把该键定义为 ace-window
具体在 github 上都可以找到, 也可以直接在 emacs 的包管理中直接安装, 不一一列举.


使用 el-get 就可以安装 Ace-Jump-Mode,然后添加以下配置文件:
(autoload
  'ace-jump-mode
  "ace-jump-mode" t)
(eval-after-load "ace-jump-mode"
  '(ace-jump-mode-enable-mark-sync))

(define-key global-map (kbd "C-c SPC") 'ace-jump-mode)
(define-key global-map (kbd "C-x SPC") 'ace-jump-mode-pop-mark)
Ace-Jump-Mode 提供三种跳跃方式:
  • "C-c SPC” ==> ace-jump-word-mode
    enter first character of a word, select the highlighted key to move to it.
  • "C-u C-c SPC” ==> ace-jump-char-mode
    enter a character for query, select the highlighted key to move to it.
  • "C-u C-u C-c SPC” ==> ace-jump-line-mode
    each non-empty line will be marked, select the highlighted key to move to it.
具体使用就是,输入以上三种中任意之一的快捷键,MiniBuffer 就会提示你输入一个字母,比如你想跳到 World 这个单词,就输入 W。之后 Ace-Jump-Mode 会将文件中所有 W 打头的单词显示为一个单个字母,然后你在按这个字母就会跳到那个单词的开头了。语言比较难解释,所以最好还是看作者制作的说明动画,一看就能明白了。
估计大家都知道 Emacs 能分割出很多个窗口,这样能在某些方面可以极大的提高效率。如果我分出两个窗口,可以使用 C-x o 来从两个窗口中快捷的切换,但是如果我分割的窗口多于三个,在用 C-x o 来切换就很蛋疼了。如果你跟我一样经常使用三个以上的窗口分割,那么你也需要 Switch-Windows 这个扩展包。它唯一的功能就是:当你的分割窗口大于等于三的时候,在你按下 C-x o 时,会自动的在所有的分割窗口上显示一个数字,然后你在按下这个数字键就会快速的跳跃到这个窗口了。
这个扩展包比较简单,用 el-get 安装的话,默认什么配置都不需要就可以使用了。

没有评论:

发表评论