emacs 新手必看: undo-tree

标签: News | 发表时间:2011-10-25 21:54 | 作者:Kardinal leafduo
出处:http://linuxtoy.org


火星人都知道,emacs 只有 undo ,没有 redo ……或者说它有 redo,但是相当的诡异,套用一句经典台词就是: 猥琐,非常的猥琐

简单的说,emacs 的 redo 就是 undo undo ,也就是传说中的负负得正。

可能有些 emacs 新手,还不知道怎么去操作,因为一般情况下,无论你 undo 多少次,都不会发生 redo 的现象。

这是因为 emacs 把相同类型的操作,合并为一个事件。比如说往缓冲区里打字,也就是 self-insert-command,如果每次 undo ,只是撤消掉一个字符,那就太僵硬了,所以 self-insert-command 的操作,每20次合并为一个事件,一次 undo ,撤消掉20个字符。

而 undo 的猥琐之处在于,只要连续的 undo ,无论多少个,都是一个事件……当然,这也是必需的,不然你 undo 了20次之后,又突然开始 redo ……而恰巧这时又是夜深人静的话……

undo 之后想要 redo ,就要进行一个其它类型的操作,随便输入一个字符或者移动一下光标都可以,不过标准答案是 C-g 。

这种模式有其强大之处,比如普通的编辑器中,输入 a ,undo,再输入 b ,然后无论你如何 undo redo,都不可能把 a 再召唤回来,因为它不保存上一次 undo 的状态。以下是普通编辑器中的 s1,s2,s3,s4,undo,undo,s5,s6,s7,s8,s9,undo,undo,undo,undo,undo,s10…… 最后保留的状态是 s1 , s2 , s10

s1--s2--s10
     |
     +s3--s4
     |
     +s5--s6--s7--s8--s9
好了,下面是 emacs 中同样的操作,所有的状态都可以保留,只不过中间的步骤可能有点多……
s1--s2--s3--s4
              )
    s3  u3--u4
   / | (
  |   \ s5--s6--s7--s8--s9
  |    \                  )
  |     u5--u6--u7--u8--u9
   \ 
    s10----sn
假设 u3 表示 undo s3 。从 s9 开始 undo,顺着 emacs 的“undo蛇”往回走,到了 u3 的时候,就是 undo undo s3,也就是 s3 了,而这一串 undo,也成了“undo贪吃蛇”的一部分。虽然 emacs 保留了全部的操作状态,但是从 s10 返回 s1 却要将近20步,而普通的编辑器只要两步。

这个必需得动手实验后才能有一个直观的印象,按以下步骤操作: (g C-g) (u undo)

1g2g3g4guu5g6g7g8g9guuuuuu10(可以把end-of-line绑到空格代替C-g)

其实这种“undo蛇”完全可以表示成 undo tree。s10 到 s1 ,两步;再到 s4,四步(有一步是切换分支)……

          s10----sn
         /
s1--s2--s3--s4
         \
          s5--s6--s7--s8--s9
不知道 emacs 为什么没有使用这种方式,可能是因为选择分支之类的操作很难描述吧。

好了,不提这么伤感的事,现在有一个扩展叫作 undo-tree ,基本解决了这个问题。 undo-tree 安装使用都很简单:

;放到load-path中,配置文件中添加
(require 'undo-tree)
(global-undo-tree-mode)
由于篇幅所限,就不截图了

C-x u 进入 undo-tree-visualizer-mode , p n 上下移动,在分支之前 b f 左右切换,t 显示时间戳,选定需要的状态后, q 退出。这是主要的操作,其它的自己摸索好了……

分类: News | 永久链接 | 收藏到 del.icio.us | Email 给好友 | 13 评论 | 捐助本站

相关 [emacs undo tree] 推荐:

emacs 新手必看: undo-tree

- leafduo - LinuxTOY
火星人都知道,emacs 只有 undo ,没有 redo ……或者说它有 redo,但是相当的诡异,套用一句经典台词就是: 猥琐,非常的猥琐. 简单的说,emacs 的 redo 就是 undo undo ,也就是传说中的负负得正. 可能有些 emacs 新手,还不知道怎么去操作,因为一般情况下,无论你 undo 多少次,都不会发生 redo 的现象.

XML to tree XML 树

- Bloger - 博客园-首页原创精华区
前面发了一个 html to tree 再发一个 xml to tree. 版权所有:版权所有(C) 2009. 文件名称:xml2tree.js. 完成日期:2009-12-22. 页:http://www.chaige.net */ var XML2Tree = function (ini) {.

灵异 Emacs 之画皮

- 月乾 - LinuxTOY
好吧,这回真的是一个小技巧,我以本站站长的名誉担保……如果你觉得我撒谎了,你可以把站长找出来随意处置……(神秘的声音:偶们是无辜的,找 Kardinal 就行). 话说比较讲究的同学,都喜欢给 emacs 设置个漂亮的字体,一般都是矢量字体,大黑二黑三黑啥的,就不点名了,你懂的……. 可是这样也有麻烦的时候,比如说我最近比较爱玩的 eshell ,或者版本控制的 diff 界面之类的……总之,有些情况下,用点阵字体又比较舒服点.

配置 Emacs 的小技巧

- return - LinuxTOY
前几天……大约在冬季吧,我发现了一个惊天小技巧,当然,是关于 Emacs 的……看到标题你也应该猜到. 这事要从很久以前说起,我很久以前用 Vim ,很久很久以前用 Emacs ,很久很久很久以前用 Vim ……你知道的,我也不知道我到底在多久以前用 Emacs 或者 Vim…… 后来,出了个叫 Vimim 的东东,输入法再也不用担心我的切换了.

露天小便器P-tree

- Haitao - 设计|生活|发现新鲜
2011年丹麦洛斯基尔德音乐节吸引超过10万的游客,强大的人流量对城市的公共厕所的需求也提出了考验. 但丹麦的AANDEBOOM公司却巧妙的解决了这一问题. 他们设计了50个露天小便器,分别放在主会场附近的2个不同街道. 事实证明,它确实是成功的,有大量游客乐意使用它. 这小便器还有个可爱的名字,P-Tree,向大树尿尿,顿时想到小公狗,翘起腿朝树上尿尿哦.

[转][转]TokuDB中的COLA-Tree和TokuMax中的Fractal tree(分形树)

- - heiyeluren的blog(黑夜路人的开源世界)
TokuDB中的COLA-Tree.       目前无论是商业的SQL Server,还是开源的MySQL,都基本上还在用比较老的 B+Tree(SQL Server用的是标准的B-Tree)的索引结构. 从原理来说,B系列树在查询过程中应该是不会慢的,而主要问题就是出现在插入. B-Tree在插入的时候,如果是最后一个node,那么速度非常快,因为是顺序写.

Emacs被发现未遵守GPL许可

- elis - Solidot
Emacs 23.2和23.3被发现没有遵守GPL许可证的要求公开所有源代码. 自2009年12月9日Emacs 23.1.90发布起,Emacs发行包包含了众多用Bison创建的未提供源代码的解析器. Emacs作者、自由软件基金会主席Richard Stallman称此事不仅仅是法律问题,而且是道德问题.

Emacs & cflow 生成函数调用树

- yboren - Emacs中文网
介绍 Emacs 中使用cflow制作函数的调用树. 以上内容取自 cflow 的网站: http://www.gnu.org/software/cflow/manual/html_node/Intro.html#Intro. cflow 的代码包中提供了cflow-mode.el (cflow-1.3/elisp/cflow.el), 该文件提供了 emacs 的 cflow-mode,.

我是如何从vim转向Emacs的

- flychen50 - Emacs中文网
以前,我多次试图从 vim 转变到 emacs 都失败了. 原因很多,主要原因是 vim 的确一个很强大的 editor 不愧为 emacs 的主要竞争对手,vim 很多强大的功能,很难在 emacs 中找到相应的功能,那个时候还没有水木Emacs版,如果有的话,情况会好一些, 还有一个原因就是我周围几乎没有人用 emacs ,现在也是.

大话 Emacs Shell Mode 第 3 部分

- ndv - IBM developerWorks 中国 : Linux : Articles,Tutorials
这是《大话 Emacs Shell Mode 》的最后一篇. 这一篇中介绍了 GNU Emacs 下窗口操作的一些高级技巧和扩展函数的编写方法. 通过这些扩展,可以对 Emacs 环境下的窗口与缓冲区进行灵活自如的配置,甚至旋转,由此打造一个更加灵活,舒适的 Shell 工作环境.