帮你精通Emacs之一:Emacs其实很简单哟

帮你精通Emacs之一:Emacs其实很简单哟

复合三角函数的图像

一个以讹传讹的观念"Emacs很难且耗费时间", 本文"有意打消对Emacs学习的成见. 通过点出Emacs要点的方式, 举一反三, 心有灵犀, 一通百通. 而不必案牍劳形, 悬梁刺股.

曾国藩的战术“结硬寨, 打呆仗”, 初时很慢, 待工事渐成, 则坚不可摧; 同时努力学习SICP的策略, 首先抛出点滴星火,再看时,已成燎原之势。

以直觉力为基础,步步为营,稳扎稳打,构筑Emacs技能。

1)如此简单的 Emacs

Emacs的简单,一言以蔽之,只是一个Meta键而已。

Meta键(键盘上的option/alter键)

Meta的词源含义是higher,beyond,没有最高,只有更高。

中文译为"元",发端处,源头处。

So Meta is Source,and it relates to source code。

Meta关联Source-Code,在Source-Code中,Function又是的一等公民。

Emacs的简单策略便是将Meta键绑定到Function上。

M-x (x for execucte),在此之后,便可以天马行空的查询要做的事情,

比如插入当前的日期:

帮你精通Emacs之一:Emacs其实很简单哟

insert-current-date

至此,Emacs从战略层面上的所有事情便结束了, 剩下的事情仅仅是战术层面上的高效问题与缝缝补补的实现。

2)Emacs的首要策略:引入Ctrl键

比如从目录中打开一个文件,可以M-x find-file,

帮你精通Emacs之一:Emacs其实很简单哟

M-x find-file

需要键入十一个字符 Ctrl策略,可以 C-x C-f. 只需要键入4个字符。

以上调用 functions 的过程,称之为 Command。 Command=Contrl,由此也能反过来看到选择Ctrl键也是语义绑定。

3)语义化的键位绑定

Emacs从最源头处, 首先用M(Meta)-x(Execute)调用所有的function。然后更进一步,以Control这一个键替代M-x这两个键,并将M-x调用的函数名,简化为其首字母。

比如向前移动一个字符的冗余实现过程为:M-x forward-char, 简化为C-f。C(Control)对应M(Meta)-x,而字符f为函数forward-char的首字母。

换言之,我们单单从从词源和语义出发, 就能快速且永久性记住常用的快捷键.

在最高频的快捷键绑定中, C-x, M-x 中的x(execute)省略, 简化为C-与M-。本节我们将接着阐述光标的基本动作,其操作的对象为:

字符character, 单字word, 行line, 句子sentence, 段落(*paragragh), 页page, 缓冲区buffer.

3.1.字符与单词 (Character and Word)

C-f (M-x forward-char) 向前移动一个字符的位置
C-b (M-x backword-char) 向后移动一个字符的位置

char 是最小的操作单元, char之上则是word, 回顾上文阐述的meta的词源含义是higher,因此Meta绑定相同的键, 范围要比Ctrl更大一点,。

由此, 比char大一级的是word M-f (M-x forward-word) 向前移动一个单词的位置. M-b (M-x backword -word) 向后移动一个单词的位置.

3.2.行与句子(Line and Sentence)

C-e (e for end) 移动到行尾 C-a (a for ahead) 移动到行首

同样的逻辑,Meta比Ctrl的范围高一个等级 M-a 光标移动到句首 M-e 光标移动到句末

以上两点为光标在水平方向的移动(horizontal), 与之相对应的纵向(Vertiallly)移动的操作.

3.3纵向的移动 (Vertical Movement)

C-n (调用function next-line), 向下移动一行 C-p (previous-line) 接下来, 有意思的事情来了. 由character和line操作可知, 绑定相同的键, Meta的作用范围总是比Ctrl更高一级, 但是如果此时查看:

M-p
M-n4.纵向的翻页(Vertically Page Down and Up)
向上翻页M-v, v当然是vertical, 而Meta是higher, 往更高处纵向移动, 当然便是UP; 那么向下呢? 既然Meta相对于Ctrl而higher, 反过来Ctrl则是Lower; 因此向下翻页是C-v. 此处的心思, 一级绑定, 始终用最少的动作, 最少的触发键, 如果绑定三个键, 则不需要Ctrl的参与. 比如设置三键组合M-v-u(up), M-v-d(down)向下,如此设置比较双键组合尚显冗余。 然而,M-v与C-v辅助便利地向上和向下翻页, 问题是他们是整屏, 整屏地翻页, 大多数时候, 这不是我们想要的. 更常用的操作是半屏半屏的翻页.

现在重新回到M-p与M-n, 绑定半屏翻页.

(defun scroll-half-page-down ()
  "scroll down half the page"
  (interactive)
  (scroll-down (/ (window-body-height) 2)))

(defun scroll-half-page-up ()
  "scroll up half the page"
  (interactive)
  (scroll-up (/ (window-body-height) 2)))

(global-set-key "M-n" 'scroll-half-page-up)
(global-set-key "M-p" 'scroll-half-page-down)
因为设置了触控板(或者鼠标)Invert scroll direction(Natural Scrolling), 因此up与down是反着映射到next和previous的

发现Emacs没有定义这两个key-sequnces, 根据前面的逻辑, M-p应该向上移动更多行, 至少比一行要多; Emacs竟然没有定义, 这真是千载难逢的良机. 此节按下不表, 先小结Ctrl的光标操作. Ctrl能操作的最大单位是line, 更大范围的光标动作交由Meta完成.

3.4.纵向的翻页(Vertically Page Down and Up)

向上翻页M-v, v当然是vertical, 而Meta是higher, 往更高处纵向移动, 当然便是UP;

那么向下呢? 既然Meta相对于Ctrl而higher, 反过来Ctrl则是Lower; 因此向下翻页是C-v. 此处的心思, 一级绑定, 始终用最少的动作, 最少的触发键, 如果绑定三个键, 则不需要Ctrl的参与. 比如设置三键组合M-v-u(up), M-v-d(down)向下,如此设置比较双键组合尚显冗余。 然而,M-v与C-v辅助便利地向上和向下翻页, 问题是他们是整屏, 整屏地翻页, 大多数时候, 这不是我们想要的. 更常用的操作是半屏半屏的翻页.

现在重新回到M-p与M-n, 绑定半屏翻页.

(defun scroll-half-page-down ()
  "scroll down half the page"
  (interactive)
  (scroll-down (/ (window-body-height) 2)))

(defun scroll-half-page-up ()
  "scroll up half the page"
  (interactive)
  (scroll-up (/ (window-body-height) 2)))

(global-set-key "M-n" 'scroll-half-page-up)
(global-set-key "M-p" 'scroll-half-page-down)

因为设置了触控板(或者鼠标)Invert scroll direction(Natural Scrolling), 因此up与down是反着映射到next和previous的

3.5.缓冲区(Buffer)

M-< 移动到buffer头部 M-> 移动到Buffer的尾部 只要记着ctrl只管到line, 其余全部都是Higher的Meta的工作.

3.6.逻辑分割(Logical Segments)

3.7.键位布置

建议键位调整为:

Alt(option) --> Ctrl --> Space <-- Ctrl <--Alt

4)收尾总结

Emacs不必记忆一个快捷绑定,单单只靠语义化就能掌握所有的键位绑定。

展开阅读全文

页面更新:2024-04-15

标签:双键   词源   键位   组合   语义   冗余   光标   纵向   绑定   字符   事情   策略   位置   动作   操作

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top