<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_非程序员的 Emacs 使用心得</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/74235/rss</id><updated>2012-05-22T06:53:27Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/74235/rss"/><entry><id>http://www.cnblogs.com/doveyoung/archive/2012/02/05/multi-window-2.html</id><title type="text">Emacs tmux 和 vim 环境下的多窗口工作环境 - 第二季 窗口旋转</title><summary type="text">在第一季的部分介绍了怎样将窗口切割成自己需要的样子。这一季我们讨论一下如何对切割后窗口布局进行旋转。为什么需要旋转窗口布局呢？最简单的答案是：任何一个窗口布局，总有某一个时刻会让你感觉无法满足你当前的需要。这时候我们怎么办？改变窗口总比改变自己要好。既然选择了改变窗口布局，如何改变就成了下一个问题。如果能有一个传送门，让我们直接到达想要的地方，当然要把先回到最初的单窗口模式，然后再重新切割布局要方便的多了。旋转窗口就是这样的一个传送门。 让我们先从常用的多窗口模式开始说起。通常所用的多窗口模式以二窗口、三窗口、四窗口为多。四个以上窗口的环境一方面是比较少用（比较屏幕空间总是有限的，窗口切的太多，每一个窗口能用的面积就很有限了），另一方面，如果真的选择了如此复杂的窗口布局，一般也应该是经过慎重选择，专为某一种特定需求而打造的，通常需要重新布局的机会也不会很多。 所以在这里我们只讨论二窗口、三窗口、四窗口的情况。其中四窗口模式（就是田字形）由于同时具有轴对称和中心对称的特点，所以也不存在旋转的必要。这样以来，我们需要讨论的就只剩下二窗口和三窗口两种模式了。</summary><published>2012-02-05T09:44:00Z</published><updated>2012-02-05T09:44:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2012/02/05/multi-window-2.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2012/02/05/multi-window-2.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在第一季的部分介绍了怎样将窗口切割成自己需要的样子。这一季我们讨论一下如何对切割后窗口布局进行旋转。为什么需要旋转窗口布局呢？最简单的答案是：任何一个窗口布局，总有某一个时刻会让你感觉无法满足你当前的需要。这时候我们怎么办？改变窗口总比改变自己要好。既然选择了改变窗口布局，如何改变就成了下一个问题。如果能有一个传送门，让我们直接到达想要的地方，当然要把先回到最初的单窗口模式，然后再重新切割布局要方便的多了。旋转窗口就是这样的一个传送门。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;让我们先从常用的多窗口模式开始说起。通常所用的多窗口模式以二窗口、三窗口、四窗口为多。四个以上窗口的环境一方面是比较少用（比较屏幕空间总是有限的，窗口切的太多，每一个窗口能用的面积就很有限了），另一方面，如果真的选择了如此复杂的窗口布局，一般也应该是经过慎重选择，专为某一种特定需求而打造的，通常需要重新布局的机会也不会很多。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;所以在这里我们只讨论二窗口、三窗口、四窗口的情况。其中四窗口模式（就是田字形）由于同时具有轴对称和中心对称的特点，所以也不存在旋转的必要。这样以来，我们需要讨论的就只剩下二窗口和三窗口两种模式了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二窗口模式的旋转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;二窗口的旋转很容易理解啦。无非就是从横向转成竖向，再从竖向转成横向。&amp;nbsp; 但是，这里有一个坏消息和一个好消息。坏消息是这样简单的事情 Emacs 的原生代码里面居然没有提供直接的支持。在原生 Emacs 里面只能选择先使用 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 0&lt;/span&gt; 或者 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 1&lt;/span&gt; 回到单窗口模式，然后再使用 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 2&lt;/span&gt; 或者 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 3&lt;/span&gt; 重新切割。在 tmux 和 Vim 里面，这样的旋转是被原生支持的。好消息是我自己写了一个 Emacs 扩展函数 &lt;span style="font-family: courier new,courier;"&gt;change-split-type&lt;/span&gt; 来补上这个缺口。同学们在使用的时候可以自己把这个函数绑定到 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 4 c&lt;/span&gt; 上面。并且由于这个函数是自适应的，所以无论是从横向转成竖向，还是从竖向转成横向，都只需要这一个函数，及一个按键绑定就足够了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在下面的示例当中仍然遵循第一季中的约定，命令/操作的示例按如下顺序给出 Emacs - tmux - vim&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                     +----------------+----------------+ &lt;br /&gt;  |                                |  change-split-type  |                |                | &lt;br /&gt;  |      a                         |    Ctrl-b Alt-1     |                |    a           | &lt;br /&gt;  |                                |       Ctrl-w L      |                |                | &lt;br /&gt;  +--------------------------------+  ----------------&amp;gt;  |                |                | &lt;br /&gt;  |                                |                     |                |                | &lt;br /&gt;  |                                |                     |                |                | &lt;br /&gt;  |                                |                     |                |                | &lt;br /&gt;  +--------------------------------+                     +----------------+----------------+ &lt;br /&gt;                                                       &lt;br /&gt;  +---------------+----------------+                     +--------------------------------+  &lt;br /&gt;  |               |                |  change-split-type  |                                |  &lt;br /&gt;  |    a          |                |     Ctrl-b Alt-2    |     a                          |  &lt;br /&gt;  |               |                |       Ctrl-w K      |                                |  &lt;br /&gt;  |               |                |  ----------------&amp;gt;  +--------------------------------+  &lt;br /&gt;  |               |                |                     |                                |&lt;br /&gt;  |               |                |                     |                                |&lt;br /&gt;  |               |                |                     |                                |&lt;br /&gt;  +---------------+----------------+                     +--------------------------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;#+END_EXAMPLE&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三窗口模式的旋转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;另外，由于窗口旋转涉及到的问题比较复杂，所以这次我们要把 Eamcs, tmux 和 Vim 分开来讲。首先是 Emacs&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Emacs 的三窗口旋转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;也许你已经猜到了，三窗口的旋转在 Emacs 当中也没有提供原生的支持。好消息是我也写了一个 Emacs 扩展函数 &lt;span style="font-family: courier new,courier;"&gt;change-split-type-3&lt;/span&gt; 来解决这个问题。这个函数也是一个自适应函数，不论当前的窗口布局处于下图所示的那一种模式，这个函数都会将它们顺时针旋转。这样就不需要使用者自己去小心识别不同的场景，然后再去选择正确的函数了。这个函数在我的 Emacs 中是绑定在 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 4 C&lt;/span&gt; 上的。注意这里的 C 是大写，以便与上一个函数相区别。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                     +----------------+---------------+ &lt;br /&gt;  |                                | change-split-type-3 |                |               | &lt;br /&gt;  |      a                         |     Ctrl-x 4 C      |                |    a          | &lt;br /&gt;  |                                |                     |                |               |&lt;br /&gt;  +---------------+----------------+  ----------------&amp;gt;  +----------------+               |&lt;br /&gt;  |               |                |                     |                |               |&lt;br /&gt;  |               |                |                     |                |               |&lt;br /&gt;  |               |                |                     |                |               |&lt;br /&gt;  +---------------+----------------+                     +----------------+---------------+&lt;br /&gt;              ^                                                      |&lt;br /&gt;              | change-split-type-3                                  | change-split-type-3&lt;br /&gt;              |     Ctrl-x 4 C                                       |     Ctrl-x 4 C     &lt;br /&gt;              |                                                      |         &lt;br /&gt;              |                                                      v&lt;br /&gt;  +---------------+----------------+                     +----------------+---------------+&lt;br /&gt;  |               |                | change-split-type-3 |                |               |&lt;br /&gt;  |    a          |                |     Ctrl-x 4 C      |                |               |&lt;br /&gt;  |               |                |                     |                |               |&lt;br /&gt;  |               +----------------+  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;----------------  &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;+----------------+---------------+&lt;br /&gt;  |               |                |                     |                                |&lt;br /&gt;  |               |                |                     |                a               |&lt;br /&gt;  |               |                |                     |                                |&lt;br /&gt;  +---------------+----------------+                     +--------------------------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;#+END_EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;实际上在 Emacs 这里还有一个好消息。既然要自己写函数，我就索性再写一个，把旋转缓冲区的问题也一并解决了。所谓旋转缓冲区就是保持当前窗口模式不变，将三个窗口当中的编辑缓冲区按照顺时针的方向，相互调换。 这个函数的名字是 &lt;span style="font-family: courier new,courier;"&gt;roll-v-3&lt;/span&gt; 。在我的 Emacs 当中被绑定在 &lt;span style="font-family: courier new,courier;"&gt;Ctrl-x 4 r&lt;/span&gt; 按键组合上。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                     +--------------------------------+&lt;br /&gt;  |                                |      roll-v-3       |                                |&lt;br /&gt;  |               A                |     Ctrl-x 4 r      |               B                |&lt;br /&gt;  |                                |                     |                                |&lt;br /&gt;  +---------------+----------------+  ----------------&amp;gt;  +---------------+----------------|&lt;br /&gt;  |               |                |                     |               |                |&lt;br /&gt;  |      B        |       C        |                     |      C        |       A        |&lt;br /&gt;  |               |                |                     |               |                |&lt;br /&gt;  +---------------+----------------+                     +---------------+----------------+&lt;br /&gt;              ^                                                              |&lt;br /&gt;              |      roll-v-3                                   roll-v-3     |&lt;br /&gt;              |     Ctrl-x 4 r                                 Ctrl-x 4 r    |&lt;br /&gt;              |                                                              |&lt;br /&gt;              |              +-------------------------------+               |&lt;br /&gt;              |              |                               |               |&lt;br /&gt;              +------------- |               C               |  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;------------&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;+&lt;br /&gt;                             |                               |            &lt;br /&gt;                             +---------------+---------------+&lt;br /&gt;                             |               |               |&lt;br /&gt;                             |      A        |       B       |&lt;br /&gt;                             |               |               |&lt;br /&gt;                             +---------------+---------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;#+END_EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;tmux 的三窗口旋转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;tmux 对三窗口模式提供了原生支持，所以在 tmux 里面进行三窗口旋转是最方便的。但是这种支持也是有限度的，大家可以看到在这里 tmux 比 Emacs 少了一种布局方式。&lt;/p&gt;&lt;p&gt;注： 下面示例中的 M 代表 Meta 键，对应到现代键盘上通常是 Alt 键&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;                                                         +----------------+----------------+&lt;br /&gt;                               Ctrl-b M-3                |                |                |&lt;br /&gt;                +--------------------------------------  |                |       b        |&lt;br /&gt;                |                                        |                |                |&lt;br /&gt;                |   +---------------------------------&amp;gt;  |      a         +----------------+&lt;br /&gt;                |   |          Ctrl-b M-4                |                |                |&lt;br /&gt;                |   |                                    |                |       c        |&lt;br /&gt;                v   |                                    |                |                |&lt;br /&gt;  +--------------------------------+                     +----------------+----------------+&lt;br /&gt;  |                                |                                    ^  |&lt;br /&gt;  |               a                |                                    |  |&lt;br /&gt;  |                                |                                    |  |            &lt;br /&gt;  +---------------+----------------+                        Ctrl-b M-4  |  |  Ctrl-b M-5&lt;br /&gt;  |               |                |                                    |  |            &lt;br /&gt;  |      b        |       c        |                                    |  |            &lt;br /&gt;  |               |                |                                    |  v&lt;br /&gt;  +---------------+----------------+                     +----------------+----------------+&lt;br /&gt;                |   ^                                    |                |                |&lt;br /&gt;                |   |                                    |      a         |       b        |&lt;br /&gt;                |   |           Ctrl-b M-3               |                |                |&lt;br /&gt;                |   +----------------------------------  +----------------+----------------+&lt;br /&gt;                |                                        |                                 |&lt;br /&gt;                +-------------------------------------&amp;gt;  |                c                |&lt;br /&gt;                                Ctrl-b M-5               |                                 |&lt;br /&gt;                                                         +---------------------------------+&lt;br /&gt;#+END_EXAMPLE&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;Vim 的三窗口旋转&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Vim 的窗口旋转在这里是最复杂的。首先 Vim 也对窗口的旋转提供了原生的支持。通过原生支持，可以实现各种各样的旋转支持，并且所有这些方式都具有浓郁的 Vim 色彩。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于 Vim 的三窗口旋转需要分成两部分来介绍。首先是最简单的一种方式。这种方式严格来说不能称之为&amp;ldquo;旋转&amp;rdquo;，应该叫&amp;ldquo;对调&amp;rdquo;才对，但是因为也是可以在三窗口模式下使用的一种操作，所以在这里就一并介绍了。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                     +----------------+----------------+&lt;br /&gt;  |                                |                     |                |                |&lt;br /&gt;  |      a                         |      Ctrl-w J       |       b        |    c           |&lt;br /&gt;  |                                |  -----------------&amp;gt; |                |                |&lt;br /&gt;  +---------------+----------------+                     +----------------+----------------+&lt;br /&gt;  |               |                |  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;----------------- &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;|                                 |&lt;br /&gt;  |      b        |       c        |      Ctrl-w K       |                a                |&lt;br /&gt;  |               |                |                     |                                 |&lt;br /&gt;  +---------------+----------------+                     +---------------------------------+&lt;br /&gt;&lt;br /&gt;#+END_EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;下面要介绍的就是真正的旋转了。虽然 Vim 原生提供了丰富的多窗口操作支持，但是其中的有些操作并不是非常直接的。从下面的示例中就能看到，需要一个中间状态来过渡，才能够完成。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;注1： 在一下示例中，标有字母 a 的窗口代表当前窗口，也就是光标所在的窗口。&lt;/p&gt;&lt;p&gt;注2：在右下角的旋转示例当中，标有字母 b 的窗口代表当前窗口。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +-----------------+                 +-----+-----+-----+                 +--------+--------+&lt;br /&gt;  |        a        |    Ctrl-w H     |     |     |     |     Ctrl-w J    |   b    |   c    |&lt;br /&gt;  |                 | --------------&amp;gt; |     |     |     | --------------&amp;gt; |        |        |&lt;br /&gt;  +--------+--------+                 |  a  |  b  |  c  |                 +--------+--------+&lt;br /&gt;  |    b   |   c    | &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;-------------- &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;|     |     |     | &amp;lt;-------------- |        a        |&lt;br /&gt;  |        |        |    Ctrl-w K     |     |     |     |     Ctrl-w H    |                 |&lt;br /&gt;  +--------+--------+                 +-----+-----+-----+                 +-----------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  +--------+--------+                 +-----------------+                 +--------+--------+&lt;br /&gt;  |        |   b    |    Ctrl-w K     |       a         |     Ctrl-w L    |   b    |        |&lt;br /&gt;  |        |        | --------------&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt; +-----------------+  -------------&amp;gt; |        |        |&lt;br /&gt;  |   a    +--------+                 |       b         |                 +--------+   a    |&lt;br /&gt;  |        |        | &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;-------------- &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;+-----------------+  &amp;lt;------------- |        |        |&lt;br /&gt;  |        |   c    |    Ctrl-w H     |       c         |     Ctrl-w K    |   c    |        |&lt;br /&gt;  +--------+--------+                 +-----------------+                 +--------+--------+&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ^&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; Ctrl-w H&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; Ctrl-w H&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v&lt;br /&gt;&amp;nbsp; +-----------------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +--------+--------+&lt;br /&gt;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp; +--------+--------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +--------+--------+&lt;br /&gt;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp; a&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp; +--------+--------+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +-----------------+&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#+END_EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;注： 关于这一季当中提到的所以 Emacs 扩展函数，请访问 &lt;a title="EmacsWiki" href="http://www.emacswiki.org/emacs/DavidYoung" target="_blank"&gt;EmacsWiki&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/2339088.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2012/02/05/multi-window-2.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2012/02/04/multi-window-1.html</id><title type="text">Emacs tmux 和 vim 环境下的多窗口工作环境 - 第一季</title><summary type="text">这个世界上编程工具分为三种，Emacs，VIM 和 各种 IDE们。在过去的十几年里面，IDE 编程环境由于庞大资金的积极推动，取得了相当可观的市场地位。但是历史的发展总是螺旋前进的，随着 IDE 环境变得越来越庞大，越来越复杂，庞大和复杂本身就成了 IDE 环境越来越无法解决的问题。随着大量快速多边的编程需求的出现，越来越多的程序员的开始寻找快速简单而又灵活多变的轻量化编程环境古老的 Emacs 和 VIM 又重新进入了程序员的视线。对于初次接触这些轻量级编程工具的同学们来说，最直接的一个感受可能就是——哇！整个世界安静了！从此直落的白茫茫一片大地真干净…… 但是呢，实话实说，真的就只有一个窗口的话是绝对不够的。多窗口不是错，错的是窗口太多太乱了。所以，像 Emacs，VIM 这样的编程环境，选择了最简单的解决方法——将窗口留给你自己来决定。下面我们就来看看在这些古老的编辑器里面怎样打造自己的窗口环境。第一季先从最简单的切分窗口开始。当然了，这些古老的工具经过漫长的发展演变已经变成了堪称“神级”的作品，完整的使用方式已经多到不可胜数。我在这里只涉及一些最简单的</summary><published>2012-02-04T07:13:00Z</published><updated>2012-02-04T07:13:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2012/02/04/multi-window-1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2012/02/04/multi-window-1.html"/><content type="html">&lt;p&gt;这个世界上编程工具分为三种，Emacs，VIM 和 各种 IDE们。在过去的十几年里面，IDE 编程环境由于庞大资金的积极推动，取得了相当可观的市场地位。但是历史的发展总是螺旋前进的，随着 IDE 环境变得越来越庞大，越来越复杂，庞大和复杂本身就成了 IDE 环境越来越无法解决的问题。随着大量快速多边的编程需求的出现，越来越多的程序员的开始寻找快速简单而又灵活多变的轻量化编程环境古老的 Emacs 和 VIM 又重新进入了程序员的视线。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于初次接触这些轻量级编程工具的同学们来说，最直接的一个感受可能就是&amp;mdash;&amp;mdash;哇！整个世界安静了！从此直落的白茫茫一片大地真干净&amp;hellip;&amp;hellip; 但是呢，实话实说，真的就只有一个窗口的话是绝对不够的。多窗口不是错，错的是窗口太多太乱了。所以，像 Emacs，VIM 这样的编程环境，选择了最简单的解决方法&amp;mdash;&amp;mdash;将窗口留给你自己来决定。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;窗口切割&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面我们就来看看在这些古老的编辑器里面怎样打造自己的窗口环境。第一季先从最简单的切分窗口开始。当然了，这些古老的工具经过漫长的发展演变已经变成了堪称&amp;ldquo;神级&amp;rdquo;的作品，完整的使用方式已经多到不可胜数。我在这里只涉及一些最简单的用法，抛砖引玉，为那些刚刚开始接触的同学们做个参考。&lt;/p&gt;&lt;p&gt;下面的示例包括三种工具：Emacs - tmux - vim 。Emacs 和 vim 就不用介绍了，tmux 这个名字可能有些同学没有听说过。 tmux 是一个终端窗口管理器。是的，你没有听错，不仅仅是编辑器可以多窗口，即便是一个终端内部也可以窗口、窗口、窗口、窗口、^_^&lt;/p&gt;&lt;p&gt;这一季介绍三部分内容：第一部分是&lt;strong&gt;如何把窗口切开来&lt;/strong&gt;。第二部分是&lt;strong&gt;如何把切开的窗口收起来&lt;/strong&gt;。 第三部分是&lt;strong&gt;如何调整切出来的窗口的大小&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面的示例当中设计的命令/操作按如下顺序给出 Emacs - tmux - vim 。示例当中的 tab 代表 tab 键，right 和 left 分别代表向右和向左箭头键，up 和 down 分别代表向上和向下箭头键。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;首先是如何把窗口切开来&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +---------------------------------+                    +--------------------------------+&lt;br /&gt;  |                                 |       Ctrl-x 2     |                                |&lt;br /&gt;  |                                 |       Ctrl-b "     |                                |&lt;br /&gt;  |                                 |       :split       |                                |&lt;br /&gt;  |                                 |  ----------------&amp;gt; +--------------------------------+&lt;br /&gt;  |                                 |                    |                                |&lt;br /&gt;  |                                 |                    |                                |&lt;br /&gt;  |                                 |                    |                                |&lt;br /&gt;  +---------------------------------+                    +--------------------------------+&lt;br /&gt;              |                                                      |&lt;br /&gt;              |  Ctrl-x 3                                            |   Ctrl-x o    Ctrl-x 3&lt;br /&gt;              |  Ctrl-b %                                            |   Ctrl-b tab  Ctrl-x %&lt;br /&gt;              |  :vsplit                                             |   Ctrl-w down :vsplt&lt;br /&gt;              v                                                      v&lt;br /&gt;  +----------------+----------------+                    +--------------------------------+&lt;br /&gt;  |                |                |                    |                                |&lt;br /&gt;  |                |                |                    |                                |&lt;br /&gt;  |                |                |                    |                                |&lt;br /&gt;  |                |                |                    +---------------+----------------+&lt;br /&gt;  |                |                |                    |               |                |&lt;br /&gt;  |                |                |                    |               |                |&lt;br /&gt;  |                |                |                    |               |                |&lt;br /&gt;  +----------------+----------------+                    +---------------+----------------+&lt;br /&gt;              |&lt;br /&gt;              |  Ctrl-x o     Ctrl-x 2&lt;br /&gt;              |  Ctrl-b tab   Ctrl-b "&lt;br /&gt;              |  Ctrl-w right :split&lt;br /&gt;              v&lt;br /&gt;  +----------------+----------------+&lt;br /&gt;  |                |                |                         &lt;br /&gt;  |                |                |                      +------------------------+     &lt;br /&gt;  |                |                |                      |                        |     &lt;br /&gt;  |                +----------------+                      | Legend:                |     &lt;br /&gt;  |                |                |                      |              .Emacs    |     &lt;br /&gt;  |                |                |                      |              .tmux     |     &lt;br /&gt;  |                |                |                      |              .vim      |     &lt;br /&gt;  +----------------+----------------+                      +------------------------+   &lt;br /&gt;&lt;br /&gt;#+END_EXAMPLE&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;然后是如何将切开的窗口收回去&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;                                                        &lt;br /&gt;                                                        &lt;br /&gt;  +--------------------------------+                    +---------------------------------+&lt;br /&gt;  |                                |       Ctrl-x 1     |                                 |&lt;br /&gt;  |                                |       Ctrl-b !     |                                 |&lt;br /&gt;  |                                |       :only        |                                 |&lt;br /&gt;  +---------------+----------------+  ----------------&amp;gt; |                                 |&lt;br /&gt;  |               |                |                    |                                 |&lt;br /&gt;  |               |                |                    |                                 |&lt;br /&gt;  |               |                |                    |                                 |&lt;br /&gt;  +---------------+----------------+                    +---------------------------------+&lt;br /&gt;               |         &lt;br /&gt;               |  Ctrl-x 0&lt;br /&gt;               |  Ctrl-b x&lt;br /&gt;               |  :hide   &lt;br /&gt;               v&lt;br /&gt;  +--------------------------------+&lt;br /&gt;  |                                |                   +------------------------+&lt;br /&gt;  |                                |                   |                        |&lt;br /&gt;  |                                |                   | Legend:                |&lt;br /&gt;  +--------------------------------+                   |              .Emacs    |&lt;br /&gt;  |                                |                   |              .tmux     |&lt;br /&gt;  |                                |                   |              .vim      |&lt;br /&gt;  |                                |                   +------------------------+&lt;br /&gt;  +--------------------------------+&lt;br /&gt;#+END_EXAMPLE&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;最后是调整窗口的大小&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在这个地方有两点需要说明：&lt;/p&gt;&lt;p&gt;1. 对于 Emacs 和 vim ，这里给出的示例每次只能调整一行或一列大小。大家在实际使用的时候可以选择加上数字前缀，提高调整的效率。&lt;/p&gt;&lt;p&gt;2. 对于 tmux 窗口的左右调整，是根据 tmux 手册里面的描述给出的。但是在我的 urxvt 终端里面不工作，不清楚是终端的原因还是 tmux 的原因。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#+BEGIN_EXAMPLE&lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                    +--------------------------------+&lt;br /&gt;  |                                |       Ctrl-x ^     |                                |&lt;br /&gt;  |   a                            |  Ctrl-b Ctrl-down  |   a                            |&lt;br /&gt;  |                                |       Ctrl-w +     |                                |&lt;br /&gt;  +--------------------------------+  ----------------&amp;gt; |                                |&lt;br /&gt;  |                                |                    |                                |&lt;br /&gt;  |                                |                    +--------------------------------+&lt;br /&gt;  |                                |                    |                                |&lt;br /&gt;  +--------------------------------+                    +--------------------------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  +--------------------------------+                    +--------------------------------+&lt;br /&gt;  |                                |    shrink-window   |  a                             |&lt;br /&gt;  |   a                            |   Ctrl-b Ctrl-up   +--------------------------------+&lt;br /&gt;  |                                |       Ctrl-w -     |                                |&lt;br /&gt;  +--------------------------------+  ----------------&amp;gt; |                                |&lt;br /&gt;  |                                |                    |                                |&lt;br /&gt;  |                                |                    |                                |&lt;br /&gt;  |                                |                    |                                |&lt;br /&gt;  +--------------------------------+                    +--------------------------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  +----------------+----------------+                   +------------------------+-------+&lt;br /&gt;  |                |                |    Ctrl-x }       |                        |       |&lt;br /&gt;  |       a        |                |  Ctrl-b Ctrl-right|   a                    |       |&lt;br /&gt;  |                |                |      Ctrl-w &amp;gt;     |                        |       |&lt;br /&gt;  |                |                | ----------------&amp;gt; |                        |       |&lt;br /&gt;  |                |                |                   |                        |       |&lt;br /&gt;  |                |                |                   |                        |       |&lt;br /&gt;  |                |                |                   |                        |       |&lt;br /&gt;  +----------------+----------------+                   +------------------------+-------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  +----------------+----------------+                   +-------+------------------------+&lt;br /&gt;  |                |                |     Ctrl-x }      |       |                        |&lt;br /&gt;  |       a        |                |  Ctrl-b Ctrl-left |   a   |                        |&lt;br /&gt;  |                |                |      Ctrl-w &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;     |       |                        |&lt;br /&gt;  |                |                | ----------------&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt; |       |                        |&lt;br /&gt;  |                |                |                   |       |                        |&lt;br /&gt;  |                |                |                   |       |                        |&lt;br /&gt;  |                |                |                   |       |                        |&lt;br /&gt;  +----------------+----------------+                   +-------+------------------------+&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;#+END_EXAMPLE&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/2337916.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2012/02/04/multi-window-1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/04/20/2021972.html</id><title type="text">转载：：近看图灵碗</title><summary type="text">以下内容均为转载，原作者为 科学松鼠会。原文地址见每行标题下的 URL. 在此转载仅为交流和分享所用。近看图灵碗 (0. 引言)http://songshuhui.net/archives/32599近看图灵碗 (一. 从苏黎世到巴黎) (上)http://songshuhui.net/archives/31343近看图灵碗 (一. 从苏黎世到巴黎) (下)http://songshuhui.net/archives/31345近看图灵碗 (8. 我就是上帝) (上)http://songshuhui.net/archives/33469近看图灵碗 (8. 我就是上帝) (下)http://s</summary><published>2011-04-20T02:23:00Z</published><updated>2011-04-20T02:23:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/04/20/2021972.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/04/20/2021972.html"/><content type="html">&lt;p&gt;以下内容均为转载，原作者为 科学松鼠会。原文地址见每行标题下的 URL. 在此转载仅为交流和分享所用。&lt;/p&gt;&lt;p&gt;近看图灵碗 (0. 引言)&lt;/p&gt;&lt;p&gt;http://songshuhui.net/archives/32599&lt;/p&gt;&lt;p&gt;近看图灵碗 (一. 从苏黎世到巴黎) (上)&lt;/p&gt;&lt;p&gt;http://songshuhui.net/archives/31343&lt;/p&gt;&lt;p&gt;近看图灵碗 (一. 从苏黎世到巴黎) (下)&lt;/p&gt;&lt;p&gt;http://songshuhui.net/archives/31345&lt;/p&gt;&lt;p&gt;近看图灵碗 (8. 我就是上帝) (上)&lt;/p&gt;&lt;p&gt;http://songshuhui.net/archives/33469&lt;/p&gt;&lt;p&gt;近看图灵碗 (8. 我就是上帝) (下)&lt;/p&gt;&lt;p&gt;http://songshuhui.net/archives/34291&lt;/p&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/2021972.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/04/20/2021972.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/04/07/2007881.html</id><title type="text">转载，不解释</title><summary type="text">Dear Kate,Here's to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the squareholes. The ones who see things differently. They're not fond of rules. And they have no respect for the status quo. You can praise them, disagree with them,quote them, disbelieve them,</summary><published>2011-04-07T06:25:00Z</published><updated>2011-04-07T06:25:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/04/07/2007881.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/04/07/2007881.html"/><content type="html">Dear Kate,&lt;br /&gt;&lt;br /&gt;Here's to the crazy ones. The misfits. The rebels. &lt;br /&gt;The troublemakers. The round pegs in the square&lt;br /&gt;holes. The ones who see things differently. They're &lt;br /&gt;not fond of rules. And they have no respect for the &lt;br /&gt;status quo. You can praise them, disagree with them,&lt;br /&gt;quote them, disbelieve them, glorify or vilify them.&lt;br /&gt;About the only thing you can't do is ignore them.&lt;br /&gt;Because they change things.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Take Care,&lt;br /&gt;John Appleseed&lt;br /&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/2007881.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/04/07/2007881.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/03/28/1997832.html</id><title type="text">转载 ：： 编程珠玑番外篇 -- 原著 徐宥</title><summary type="text">以下内容均为转载，原作者为 徐宥。原文地址见每行标题下的 URL. 在此转载仅为交流和分享所用。编程珠玑番外篇的番外篇http://blog.youxu.info/2008/12/22/about-pearls/编程珠玑番外篇-D. 高级语言怎么来的-1http://blog.youxu.info/2009/05/13/hpl/编程珠玑番外篇-E. 高级语言怎么来的-2http://blog.youxu.info/2009/06/13/vm/编程珠玑番外篇-F. 高级语言怎么来的-3http://blog.youxu.info/2009/07/02/fortran/编程珠玑番外篇-G. 高级语</summary><published>2011-03-28T08:20:00Z</published><updated>2011-03-28T08:20:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/03/28/1997832.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/03/28/1997832.html"/><content type="html">&lt;h2 class="entry-title"&gt;以下内容均为转载，原作者为 徐宥。原文地址见每行标题下的 URL. 在此转载仅为交流和分享所用。&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2008/12/22/about-pearls/"&gt;编程珠玑番外篇的番外篇&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2008/12/22/about-pearls/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2009/05/13/hpl/"&gt;编程珠玑番外篇-D. 高级语言怎么来的-1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2009/05/13/hpl/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2009/06/13/vm/"&gt;编程珠玑番外篇-E. 高级语言怎么来的-2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2009/06/13/vm/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2009/07/02/fortran/"&gt;编程珠玑番外篇-F. 高级语言怎么来的-3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2009/07/02/fortran/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2009/08/31/lisp-and-ai-1/"&gt;编程珠玑番外篇-G. 高级语言怎么来的-4&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2009/08/31/lisp-and-ai-1/&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.youxu.info/2009/08/31/lisp-and-ai-1/" rel="bookmark" title="Permanent Link to 编程珠玑番外篇-H. 高级语言怎么来的-4"&gt;编程珠玑番外篇-H. 高级语言怎么来的-4&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2009/08/31/lisp-and-ai-1/&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2010/02/10/lisp-and-ai-2/"&gt;编程珠玑番外篇-I. 高级语言是怎么来的-5&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2010/02/10/lisp-and-ai-2/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2010/07/12/scheme-1/"&gt;编程珠玑番外篇 -J. 高级语言是怎么来的-6&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2010/07/12/scheme-1/&lt;br /&gt;&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2011/03/21/story-of-plan-9-revised/"&gt;编程珠玑番外篇-K. Plan 9 的故事（修订版）&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;http://blog.youxu.info/2011/03/21/story-of-plan-9-revised/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1997832.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/03/28/1997832.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/03/24/youxu-1.html</id><title type="text">转载:: 完全用命令行工作-4: 苹果图形界面脚本化</title><summary type="text">完全使用键盘能强迫人使用高效简洁和正确的工具. 随着图形界面和多媒体的出现, 鼠标的反而成了一个最常见的动作. 其实认真分析鼠标点选操作就发现, 无非是两种: 一种是用鼠标选择内容, 准备用一定的工具和程序处理这个内容, 还有一种是鼠标选择操作. 前者对内容的选择, 鼠标是高效的. 而后者对操作的选择, 鼠标是低效的 (因为键盘快捷键和命令行更加高效). 因此, 如果我们想要高效的工作, 就要避免后一种操作, 并且进一步解放前者.</summary><published>2011-03-24T15:43:00Z</published><updated>2011-03-24T15:43:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/03/24/youxu-1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/03/24/youxu-1.html"/><content type="html">&lt;p&gt;以下内容均为转载，原作者为 徐宥, 一个计算机专业的 Ph.D. 学生。原文地址为 &lt;a target="_blank" href="http://blog.youxu.info/2008/10/19/macos-and-command-line-script/"&gt;http://blog.youxu.info/2008/10/19/macos-and-command-line-script/&lt;/a&gt; 在此转载仅为交流和分享所用。&lt;/p&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://blog.youxu.info/2008/10/19/macos-and-command-line-script/"&gt;完全用命令行工作-4: 苹果图形界面脚本化&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我用苹果 Mac OS X 两年了, 越用越觉得, 其他操作系统要从苹果的 Mac OS X 上学习很多东西. 特别是图形界面的统一的脚本化接口, 我认为这对未来的操作系统是一个很好的启示, 也是完全用命令行工作哲学在图形界面时代的一个不可缺少的部分.&lt;/p&gt;&lt;p&gt;&lt;img title="textedit_icon" src="http://blog.youxu.info/wp-content/uploads/2008/10/textedit_icon-300x300.png" align="left" height="210" width="210" /&gt;&lt;/p&gt;&lt;p&gt;起因是最近我在写一系列的中文文章, 因为几乎没有数学公式, 而我又喜欢纯文本的工作方式, 因此在排版上我选择了&lt;a target="_blank" href="http://docutils.sourceforge.net/rst.html"&gt;reStructuredText&lt;/a&gt;. 一般来说, 英文文本我都是直接在 vim 下工作. 可是苹果下的 vim 对中文的支持不是想像的那么好, 至少中文输入法打出来的常常有乱码. 名动天下的 &lt;a target="_blank" href="http://macromates.com/"&gt;TextMate&lt;/a&gt; 固然好, 显示中文却只有半个字那么宽, 看上去很不舒服. 其他的编辑器要么收费, 要么嫌大, 要么不顺手, 因此落到最后还是用了苹果的 TextEdit.&lt;/p&gt;&lt;p&gt;但是写技术文章的人都知道, 写文章不仅是打字这么简单. 特别是技术文章, 常常需要离开编辑环境跑脚本, 查Google, 看 wiki. (我不知道别人是不是这样, 至少我为了写出质量较好的文章, 写的时候也要做很多功课). 特别是因为我在用 reStructuredText, 一个最基本的需求就是处理当前文本生成 HTML/LaTeX 然后预览. 这些需求, 在 VIM 和 TextMate 中都是原生支持的, 很简单能做到. 但是在 TextEdit 这样的软件中, 乍一看, 毫无办法. 所幸的是, UNIX 家族的操作系统, 特别是苹果, 秉承了 简单的事情要有简单的解法, 复杂的事情要有可能的解法 这样的设计思路, 提供了不止一条解决问题的方法. 因为苹果设计了一个叫做&amp;rdquo;脚本化应用程序&amp;rdquo;的东西, 使得这些任务可以很简单的完成. 我研究了几天, 学到了一些东西, 拿出来和大家分享.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;1. 最常常被忽略的菜单栏, Service 菜单.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;用具体的例子来说可能更加简单. 用 Gmail 的各位都知道, 如果邮件里面有 90081243455 这样的数字串, 或者有 北京是西城区XX路YY号 这样的地址, Gmail 就很贴心的显示出 &amp;ldquo;使用 Google 追踪快递包裹&amp;rdquo; 或者 &amp;ldquo;使用地图查看地址&amp;rdquo; 这样的链接. 也就是说, Gmail 会识别出这些特定的样式, 然后给你一个上下文相关的(也就是说, 和你内容相关的) 服务. 这样的服务贴心舒适, 相信不少人都很喜欢. 一般我们把这个叫做上下文相关的服务.&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://blog.youxu.info/wp-content/uploads/2008/10/ubiquity_side.png"&gt;&lt;img title="ubiquity_side" src="http://blog.youxu.info/wp-content/uploads/2008/10/ubiquity_side.png" align="right" height="213" width="150" /&gt;&lt;/a&gt;再说 Firefox. 前不久 Firefox 出了一个很贴心的小插件, 叫做 &lt;a target="_blank" href="http://labs.mozilla.com/2008/08/introducing-ubiquity/"&gt;Ubiquity&lt;/a&gt;, 我在 Firefox 下几乎离不开它: 选中任何一行地址, 只需要敲几个键, 就可以查 Google Map. 选中任何一个名词, 可以立即查 Wikipedia, 等等. 一般我们把也把这个叫做基于选定的服务.&lt;/p&gt;&lt;p&gt;苹果上的 Service 菜单, 就是这样的一个基于上下文相关和基于选定的服务. 举个最简单的例子, 如果你的机器上装有 Skype, 然后你选中了一串电话号码, 这时候你可以到 Service 菜单中选择 Skype -&amp;gt; Call this number. Skype 就会自动拨打这个电话. 或者选中一个单词, Service 菜单中就会自动出现: Look up in the Dictionary. 选中它以后, 你机器上的字典就会跳出来, 把单词的释义呈现给你. 所有的这一切, 都是基于苹果的一个叫做 System Service 的框架. 简单的说, 每个应用程序告诉系统: 在什么情况下, 你给我什么信息, 就可以让我做什么事情. 这样, 在选定的上下文符合条件的时候, 你就可以在菜单中选择这个服务. 这个东西方便无比. 比如说, 常常老板在邮件里面写: 你这周做啥啥. 我就可以选中整行句子, 按下 ⇧⌘ Y. 这样整行句子就被纪录到 Stickies 里面去了, 相当于随时写下一个便签.&lt;/p&gt;&lt;p&gt;现有的菜单栏固然好, 但是自己编写的更加好玩. 所幸的是, 你不需要会苹果的生涩的 Obj-C 才能编写菜单. 有一个强大的工具, 叫做 &lt;a target="_blank" href="http://wafflesoftware.net/thisservice/"&gt;ThisService&lt;/a&gt;, 能够把 Ruby, Python, Applescript 和 shell 脚本都包装成 Services. 比如说我昨天就花了一分钟写了一个很简单的叫做 Translate 的脚本, 通过 Python 提交文本给 Google Translate, 返回中文. 在阅读有很多不认识的单词的新闻文章时候, 只要选中段落, 选择这个 Translate. 一个翻译成中文的窗口就出现了.  在这个软件的帮助下, 任何脚本都能点一下鼠标就变成一个服务: 具体我就不一一详述了.&lt;/p&gt;&lt;p&gt;总的来说, 我们可以注意到, 在日常使用计算机的时候, 一个应用程序中的一些内容(文本或者图像),  往往要作为另外一个程序的输入, 交给另外一个程序处理. 比如选中的单词查字典, 选中的地址查阅地图, 和选中的电话号码拨打, 选中的句子翻译等等, 这些需求都是存在的. Windows 家族解决问题的方法, 是通过程序切换和剪切板. 而苹果就是通过统一的接口来完成的, 思想和UNIX管道是非常相似一脉相承的 (当然, windows 家族从来就没有 UNIX 家族管道这个思想, 所以也就想不出统一接口这样的设计了).&lt;/p&gt;&lt;p&gt;在苹果下, 统一脚本接口可以用来处理像 Service 这样的程序之间通信的问题, 这个是 windows 家族从来没有想过的. 同时, 据我个人经验, 这个思想在 Linux/X11 家族也没有全部实现. 在 Linux 命令行下, 我们都知道, 不同的小工具之间是正交的, 一个程序的输出是一个程序的输入, 这个 UNIX 哲学长盛不衰. 直到今天, 正常的 Linux/UNIX 用户也会天天用管道做程序之间的通信. 可是在图形界面出现后, 这样的好传统在 X11 系统中似乎没有被继承. 比如, 不能选中一段文字直接送给 wc 计算字数. 究其原因, 是因为图形界面再也没有明显的输入输出这个概念了. 字符串和图像变成了要在程序之间传送的基本单位. 在这种情况下, 就需要不仅仅以文件为基本单位, 而是以被选中的那些字符串, 句子, 链接, 图片等为基本单位的通信. 在这个层面上, 苹果的确先行一步. (当然 Emacs VIM 等等也是可以通信和调用外部程序的, 但是毕竟不是整个系统都能这样).&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;2. 史上最简单的语言, AppleScript.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;故老相传, 当年 Knuth 大神访问苹果, 总裁 乔布斯 同学发挥爱吹牛的光荣传统, 说: 高教授, 您来了. 我特别崇拜你, 您的书我都读过. 各位读者都知道, 要是Jobs 真的把高教授的书都读过, 全世界大学计算机系99%的教授基本上都要自杀让位给Jobs. 所以, 高爷子知道他吹牛皮. 以下的故事分两个版本, 第一个版本是硅谷的版本, 是高爷子当即就说: 斯蒂夫同学, 你又扯淡忽悠了. 第二个版本是我的版本: 说高爷子一听, 也不生气, 心想, 你我共同作为硅谷两个最懂字体设计的搞IT的, 我也不好得罪你, 且问你一道简单的问题, 看你读了我哪几本书. 于是高爷子眼珠一转, 题上心来, 问到: 乔布斯同学, 请问世界上最简单的编程语言是啥子呢? 乔布斯是个不懂技术的主. 想起当年和 Woz 合作的时候搞的东西叫做 BASIC, 听名字就觉得简单, 于是说道: 乃是 BASIC. 高爷爷说, 还有比这个更简单的么. (话说高爷爷心想, 我手里握着 TeX, Metafont, MIX, Literate Programming, CWEB 等几张王牌, 我就不信你说不出一个搭不上边的). 乔布斯同学哪能体会到高爷爷的良苦用心, 他又不会编程, 于是就杜撰到: 我们公司最近正在开发世界上最简单的一个语言: 叫做苹果脚本(AppleScript). 高爷爷一听就知道又是吹牛, 于是立即回复: 斯蒂夫, 你又扯淡忽悠了. 斯蒂夫同学哪服软, 于是要求开发部门开发一个连他都懂怎么用的语言. 于是 AppleScript 就被捣鼓出来了.&lt;br /&gt;(以上故事纯属扯淡忽悠)&lt;/p&gt;&lt;p&gt;话说AppleScript 有多简单呢? 就和说话一样简单. 我曾经也写过介绍. 再这里再给一个例子:&lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;br /&gt;tell application "TextEdit"&lt;br /&gt;set filename to name of document 1&lt;br /&gt;print filename&lt;br /&gt;end tell&lt;/code&gt;&lt;/p&gt;&lt;p&gt;看, 明明就是英语嘛! 这么平铺直叙几乎没有语法的编程语言, 真的是世界上最简单的编程语言唉.&lt;/p&gt;&lt;p&gt;别看这个语言简单, 威力可不小. Mac 上几乎所有的应用程序, 都能够用这个语言去控制, 特别是 iTunes 甚至还有一个&lt;a target="_blank" href="http://dougscripts.com/itunes/"&gt;专门的网站&lt;/a&gt;, 专门就让你下载千奇百怪的控制脚本.&lt;/p&gt;&lt;p&gt;Applescript 还有两个好处: 1. 他是苹果原生支持的, 可以直接编译成苹果的应用程序来用. 因此, 简单的任务处理都可以用这个语言. 比如我们上面说的做成 Service 的, 也可以用 Applescript 来实现. 2. 他能够和其他应用程序交互. 其实在苹果系统中, 在脚本桥技术(Script Bridging) 出现之后, 理论上C/Javascript/Python/Ruby 都是可以和应用程序交互的. 可是AppleScript 的支持更加好, 更加直接. 比如取当前播放的iTunes乐曲名字, 可以用 AppleScript:&lt;/p&gt;&lt;p&gt;&lt;code&gt;tell application "iTunes" to get the name of the current track&lt;/code&gt;&lt;/p&gt;&lt;p&gt;也可以用 Python&lt;/p&gt;&lt;p&gt;&lt;code&gt;from Foundation import *&lt;br /&gt;from ScriptingBridge import *&lt;br /&gt;iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")&lt;br /&gt;print iTunes.currentTrack().name()&lt;/code&gt;&lt;/p&gt;&lt;p&gt;显然 Python 要显得笨重一些.&lt;/p&gt;&lt;p&gt;同时, AppleScript 也是苹果中小机器人 Otto  &lt;a target="_blank" href="http://blog.youxu.info/wp-content/uploads/2008/10/automator_icon.png"&gt;&lt;img title="automator_icon" src="http://blog.youxu.info/wp-content/uploads/2008/10/automator_icon-300x300.png" align="right" height="144" width="144" /&gt;&lt;/a&gt;的底层技术, 因此在整个系统中发挥了基础性的作用. 虽然学习 AppleScript 显得很偏很不入流, 但是在苹果上做一些小任务有时候还是用得着的. 比如说我的让 TextEdit 支持 ⇧⌘ R 自动编译的例子, 就是先写了一串脚本, 取当前文件名, 然后使用 do shell script 这个指令调用 make. 这样, 调用这个脚本, 就可以完成自动编译. 用快捷键来调用脚本, 有两种方式, 一种是通过把脚本拷贝到应用程序的脚本目录并且添加一个菜单项. 另一种是用 QuickSilver 来帮忙了. 第一种方法应该最简单, 但是我没有尝试成功, 有兴趣的读者可以读&lt;a target="_blank" href="http://oreilly.com/pub/a/mac/2007/06/08/hit-and-run-launching-applescripts-with-keyboard-shortcuts.html"&gt;这篇文章&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 15px;"&gt;3. QuickSilver&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://blog.youxu.info/wp-content/uploads/2008/10/quicksilver.png"&gt;&lt;img title="quicksilver" src="http://blog.youxu.info/wp-content/uploads/2008/10/quicksilver.png" align="left" height="128" width="128" /&gt;&lt;/a&gt;我曾经间或的提到过 QuickSilver. 刚开始我并不能体会到他的魔力, 直到最近在玩脚本控制的时候才发现. 简单的说, QuickSilver 就是能让你用键盘控制程序的程序. 或者说, QuickSilver 就是键盘命令中枢. 比如说播放音乐, 只要一键激活 QuickSilver, 再打一下 play (有时都不要打全), 回车. iTunes 就放起音乐了. 上面我们说的任何控制系统的脚本, 都能够被 QuickSilver 控制. 我在拔掉你的鼠标一文中也提到, &amp;ldquo;你要是苹果用户又不用QuickSilver或命令行, 那你是把苹果当Windows用&amp;rdquo;.&lt;/p&gt;&lt;p&gt;QuickSilver 作为应用程序快速启动的功能大家想必都很熟悉. 控制 iTunes 大家也得心应手. 我就介绍一个被大家忽略的功能: 设置上下文相关的快捷键. 传统上, 快捷键是被应用程序定死的. 即使你写了一个扩展应用程序的脚本, 你也得点点鼠标去调用, 而不能设置键盘快捷键去调用. 解决的方法有三个, 第一个是我在第一部分讲的, 包装成一个 Service. 这样的好处是可以包装出一个快捷键, 坏处是这个Service 是全局都有用的, 不管你在哪个应用程序里面, 这个 service 都能用. 第二种是我在第二部分提到的我没有尝试成功的, 即&lt;a target="_blank" href="http://oreilly.com/pub/a/mac/2007/06/08/hit-and-run-launching-applescripts-with-keyboard-shortcuts.html"&gt;添加一个菜单项目&lt;/a&gt;的方法. 第三个就是采用 QuickSilver 的 Trigger 功能了. QS 用户可以使用 ⌘&amp;rsquo; 调出 trigger, 然后添加一个 Custom Trigger, 把目标指向自己写好的一个 AppleScript, 给这个 trigger 分配一个快捷键, 并且把使用的范围 scope 限定在一些应用程序中. 这样, 不费任何功夫, 只写一个简单的脚本, 您就可以在你的计算机上把你的 TextEdit 也改造成一个功能强大的编辑器了.&lt;/p&gt;&lt;p&gt;结语: 如我在&lt;a target="_blank" href="http://blog.youxu.info/2008/09/04/unplug-your-mouse/"&gt;拔掉你的鼠标&lt;/a&gt;一文中说的, 完全使用键盘能强迫人使用高效简洁和正确的工具. 随着图形界面和多媒体的出现, 鼠标的反而成了一个最常见的动作. 其实认真分析鼠标点选操作就发现, 无非是两种: 一种是用鼠标选择内容, 准备用一定的工具和程序处理这个内容, 还有一种是鼠标选择操作. 前者对内容的选择, 鼠标是高效的. 而后者对操作的选择, 鼠标是低效的 (因为键盘快捷键和命令行更加高效). 因此, 如果我们想要高效的工作, 就要避免后一种操作, 并且进一步解放前者.&lt;/p&gt;&lt;p&gt;对后一种的避免很简单: 拔掉鼠标, 强迫用键盘. 对前者的解放, 随着各种各样如 Service, Ubiquity 以及上下文敏感程序的兴起, 使得我们不需要在不同的程序之间拷贝来拷贝去, 而是直接通过程序之间的标准接口通信, 使得我们甚至不需要切换程序. 所有的都应该这些基于命令行和后台来完成, 而不是通过分散注意力切换程序来完成. 这些新的工具, 更加符合一个高效能的现代人的需求, 更加能够提升你的效率. 当然, 决定做事的效率的不仅仅是工具, 因此, 不要迷恋这些工具. 为了获得 1% 效率的提升, 而过于强调工具的各种淫巧, 反而降低效率. (警告: 这些工具都是非常迷人的, 很容易一用就爱上它们. 记住, 效率是最好的判断标准 :).&lt;/p&gt;&lt;p&gt;附 &amp;ldquo;完全用命令行工作系列&amp;rdquo; 文章一共五篇, 写了也不少了, 有些工具我一笔带过, 有些我花了几句话讲了一下. 基本上我介绍到的提到的, 都是我自己天天用的, 也是我认为非常有用的. 我写作的时候也都是带着 &amp;ldquo;Smart and Get Things Done&amp;rdquo; 的哲学, 只介绍干净的设计良好的软件. 各位想实践 GTD 的读者可以自行选择趁手工具. 有更多的 GTD 的完全用 键盘/命令行 工作的软件, 也不妨向我推荐.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1994460.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/03/24/youxu-1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/03/03/Lyrics-1.html</id><title type="text">鬼迷心窍</title><summary type="text">曾经真的以为人生就这样了平静的心拒绝再有浪潮斩了千次的情丝却断不了百转千折它将我围绕有人问我你究竟是那里好这麽多年我还忘不了春风再美也比不上你的笑没见过你的人不会明了是鬼迷了心窍也好是前世的因缘也好然而这一切已不再重要如果你能够重回我怀抱是命运的安排也好是你存心的捉弄也好然而这一切也不再重要我愿意随你到天涯海角虽然岁月总是匆匆的催人老虽然情爱总是让人烦恼虽然未来如何不能知道现在说再见会不会太早</summary><published>2011-03-03T15:22:00Z</published><updated>2011-03-03T15:22:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/03/03/Lyrics-1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/03/03/Lyrics-1.html"/><content type="html">&lt;br /&gt;曾经真的以为人生就这样了&lt;br /&gt;平静的心拒绝再有浪潮&lt;br /&gt;斩了千次的情丝却断不了&lt;br /&gt;百转千折它将我围绕&lt;br /&gt;有人问我你究竟是那里好&lt;br /&gt;这麽多年我还忘不了&lt;br /&gt;春风再美也比不上你的笑&lt;br /&gt;没见过你的人不会明了&lt;br /&gt;&lt;br /&gt;是鬼迷了心窍也好&lt;br /&gt;是前世的因缘也好&lt;br /&gt;然而这一切已不再重要&lt;br /&gt;如果你能够重回我怀抱&lt;br /&gt;是命运的安排也好&lt;br /&gt;是你存心的捉弄也好&lt;br /&gt;然而这一切也不再重要&lt;br /&gt;我愿意随你到天涯海角&lt;br /&gt;&lt;br /&gt;虽然岁月总是匆匆的催人老&lt;br /&gt;虽然情爱总是让人烦恼&lt;br /&gt;虽然未来如何不能知道&lt;br /&gt;现在说再见会不会太早&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1970418.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/03/03/Lyrics-1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/02/20/Perl-2.html</id><title type="text">Programming in Perl Style</title><summary type="text">这是 ABC Perl Programming 之后的第二部分。名称改成现在这样是因为一本书，叫做 Higher Order Perl 。这本书的作者提到很多 Perl 的程序员在用 Perl 写 C 的程序。这是一件很不幸的事情。当然了，所谓高手可以用任何方法做任何事情。但是，既然是在学习一个语言，至少要有三分样吧。</summary><published>2011-02-19T16:26:00Z</published><updated>2011-02-19T16:26:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/02/20/Perl-2.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/02/20/Perl-2.html"/><content type="html">这是 ABC Perl Programming 之后的第二部分。名称改成现在这样是因为一本书，叫做 Higher Order Perl 。这本书的作者提到很多 Perl 的程序员在用 Perl 写 C 的程序。这是一件很不幸的事情。当然了，所谓高手可以用任何方法做任何事情。但是，既然是在学习一个语言，至少要有三分样吧。&lt;br /&gt;&lt;br /&gt;下面是 Higher-Order Perl 这本书前言的第一段。&lt;br /&gt;&lt;br /&gt;A well-known saying in the programming racket is that a good Fortran programmer&lt;br /&gt;can write Fortran programs in any language. The sad truth, though,&lt;br /&gt;is that Fortran programmers write Fortran programs in any language whether&lt;br /&gt;they mean to or not. Similarly, we, as Perl programmers, have been writing C&lt;br /&gt;programs in Perl whether we meant to or not. This is a shame, because Perl is&lt;br /&gt;a much more expressive language than C. We could be doing a lot better, using&lt;br /&gt;Perl in ways undreamt of by C programmers, but we&amp;rsquo;re not.&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110220002046871.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200021014303.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200021193534.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200021414570.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200022037209.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110220002226829.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200022407391.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200023018210.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200023229029.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200023362527.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200023543219.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200024108155.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200024264453.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110220002446671.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200025112763.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200025295798.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200025451672.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102200026013892.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1958825.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/02/20/Perl-2.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/02/06/Perl-1.html</id><title type="text">ABC Perl Programing - 回 2gua 短消息</title><summary type="text">不好意思，我是在 Gmail里看到邮件了，然后直接回复了邮件，然后…… 才看到 “这是系统自动通知邮件，不要直接回复该邮件。” 呃…… 那就贴在这里吧。是这样的，现在发出去的也就是我手头的东西。这个就是春节前给同事们分享的部分。第二部分我正在准备，等做好了也会发在博客园的。如果你着急的话我可以给你一个建议先，就是看 Perl 之前不妨看看 Lisp 先。 Perl有一个很牛的地方在于它超级的灵活，灵活到可以模仿，或者说可以为很多其他语言的想法来做实现，比如说 Lisp。其实我以前是很“排斥” Perl 的。说真的，一直不愿意学。倒不是说讨厌它，而是接触 Linux 以后首先就要熟悉 Shell</summary><published>2011-02-06T04:08:00Z</published><updated>2011-02-06T04:08:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/02/06/Perl-1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/02/06/Perl-1.html"/><content type="html">&lt;p&gt;不好意思，我是在 Gmail里看到邮件了，然后直接回复了邮件，然后&amp;hellip;&amp;hellip; 才看到 &amp;ldquo;这是系统自动通知邮件，不要直接回复该邮件。&amp;rdquo; 呃&amp;hellip;&amp;hellip; 那就贴在这里吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;是这样的，现在发出去的也就是我手头的东西。这个就是春节前给同事们分享的部分。第二部分我正在准备，等做好了也会发在博客园的。如果你着急的话我可以给你一个建议先，就是看 Perl 之前不妨看看 Lisp 先。 Perl有一个很牛的地方在于它超级的灵活，灵活到可以模仿，或者说可以为很多其他语言的想法来做实现，比如说 Lisp。&lt;/p&gt;&lt;div id=":5j"&gt;&lt;br /&gt;其实我以前是很&amp;ldquo;排斥&amp;rdquo; Perl 的。说真的，一直不愿意学。倒不是说讨厌它，而是接触 Linux 以后首先就要熟悉 Shell script嘛，Shell 熟了以后发现很多事情 Shell 就可以做了（偶单位一个跟踪和分析项目当中的 defect 的系统就是完全用 Shell 做的，只是找人写了一个简单的 &amp;nbsp;Perl 的 CGI 的页面接口而已），而且极方便，所以很不愿意接受那些复杂&amp;ldquo;&lt;wbr&gt;&lt;/wbr&gt;语法的束缚&amp;rdquo;。&lt;br /&gt;&lt;br /&gt;直到几个月前我们那个系统的报表部分需求变得空前复杂了（&lt;wbr&gt;&lt;/wbr&gt;这帮家伙居然希望能够自己写公式，还要能随时改），不得不用 Perl 来实现了（就是说Shell 不行了），就开始看骆驼书。&lt;br /&gt;&lt;br /&gt;回到正题，关于学 Perl。因为用 GNU Emacs 时间久了，难免要学一些 Lisp。虽然只是些皮毛，但是 Lisp 所涉及的思想是非常强大的。比如说 list 结构带来的 &amp;ldquo;一个操作符，无限操作数&amp;rdquo; 例如 &amp;nbsp;(+ 1 2 3 4 5 ...) &amp;nbsp;，比如 list 带来的 &amp;ldquo;数据和函数使用相同的数据结构&amp;rdquo;，比如由此带来的&amp;ldquo;像传递数据（参数）一样在函数之间传递函数&amp;rdquo;，&lt;wbr&gt;&lt;/wbr&gt;或者再说的通俗一些，&amp;ldquo;传递指令&amp;rdquo; &amp;hellip;&amp;hellip; 这都是我原来用 Java 写程序的时候梦寐以求的。那个时候我就私下里梦想，&lt;wbr&gt;&lt;/wbr&gt;编写程序应该是这个样子的，为什么不呢？直到后来，发现，&lt;wbr&gt;&lt;/wbr&gt;Lisp 就是这个样子的！！！&lt;br /&gt;&lt;br /&gt;那这些关 Perl 什么事呢？因为 Perl &amp;ldquo;也是&amp;rdquo;这个样子的！！！！！ Wow! &amp;nbsp;这就是 Perl 的精髓之一啊，就是 Lisp 有的，Perl 也有，而且是不打折的。 Lisp 虽然好，但是毕竟太古老，太遥远，&lt;wbr&gt;&lt;/wbr&gt;用来编写实际的项目会有一些实际的问题，但是 Perl 没有。 所以后来我们的报表部分就是用 Lisp 的设计思想，然后用 Perl 来做实现。&lt;br /&gt;&lt;br /&gt;最后推荐有兴趣学习 Perl 语言的朋友们，（当然 Lisp 看你自己的兴趣了） Perl 的三本骆驼书一定要认真阅读，那真的非常有用。尤其是第三本 《Advanced Perl Programming》一定要举一反三，把这本书彻底看懂。&lt;wbr&gt;&lt;/wbr&gt;这本书里面可真是&amp;ldquo;字字珠玑&amp;rdquo;啊。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1949441.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/02/06/Perl-1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/doveyoung/archive/2011/02/05/Perl.html</id><title type="text">ABC Perl Programing</title><summary type="text">这个东西本来是用 LibreOffice 做的一个 Slides， 用来给同事们介绍 Perl 语言编程的一些基本知识。这些知识在经典的几本骆驼书里面都有包含，但是每个人看书的目的、重点、方向等等都不一样，后来发现还是把这些基本的东西给大家总结一下效果更快一些。 Slides 发出去以后，大家反映很好，就把它转成图片，放到这里与更多的人分享了。现在的内容只是 ABC Perl Programing 的第一部分，最基本的数据结构部分。</summary><published>2011-02-05T14:40:00Z</published><updated>2011-02-05T14:40:00Z</updated><author><name>David Young 杨博华</name><uri>http://www.cnblogs.com/doveyoung/</uri></author><link rel="alternate" href="http://www.cnblogs.com/doveyoung/archive/2011/02/05/Perl.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/doveyoung/archive/2011/02/05/Perl.html"/><content type="html">&lt;p&gt;这个东西本来是用 LibreOffice 做的一个 Slides， 用来给同事们介绍 Perl 语言编程的一些基本知识。这些知识在经典的几本骆驼书里面都有包含，但是每个人看书的目的、重点、方向等等都不一样，后来发现还是把这些基本的东西给大家总结一下效果更快一些。 Slides 发出去以后，大家反映很好，就把它转成图片，放到这里与更多的人分享了。&lt;br /&gt;&lt;br /&gt;现在的内容只是 ABC Perl Programing 的第一部分，最基本的数据结构部分。&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052225173142.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052225361318.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110205222557989.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052226136610.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052228106210.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052228266499.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110205222842724.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052229029282.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052230401918.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052229509351.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052230169583.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/20110205223106232.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052231284528.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052231469932.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052232059787.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052232306049.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052232482981.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052233115118.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052233297655.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052233503390.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052234131722.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052234364755.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052234599923.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/doveyoung/201102/201102052235536258.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/doveyoung/aggbug/1949373.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/doveyoung/archive/2011/02/05/Perl.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
