一个以讹传讹的观念"Emacs很难且耗费时间", 本文"有意打消对Emacs学习的成见. 通过点出Emacs要点的方式, 举一反三, 心有灵犀, 一通百通. 而不必案牍劳形, 悬梁刺股.
曾国藩的战术“结硬寨, 打呆仗”, 初时很慢, 待工事渐成, 则坚不可摧; 同时努力学习SICP的策略, 首先抛出点滴星火,再看时,已成燎原之势。
以直觉力为基础,步步为营,稳扎稳打,构筑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从战略层面上的所有事情便结束了, 剩下的事情仅仅是战术层面上的高效问题与缝缝补补的实现。
比如从目录中打开一个文件,可以M-x find-file,
需要键入十一个字符 Ctrl策略,可以 C-x C-f. 只需要键入4个字符。
以上调用 functions 的过程,称之为 Command。 Command=Contrl,由此也能反过来看到选择Ctrl键也是语义绑定。
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.
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) 向后移动一个单词的位置.
C-e (e for end) 移动到行尾 C-a (a for ahead) 移动到行首
同样的逻辑,Meta比Ctrl的范围高一个等级 M-a 光标移动到句首 M-e 光标移动到句末
以上两点为光标在水平方向的移动(horizontal), 与之相对应的纵向(Vertiallly)移动的操作.
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完成.
向上翻页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的
M-< 移动到buffer头部 M-> 移动到Buffer的尾部 只要记着ctrl只管到line, 其余全部都是Higher的Meta的工作.
建议键位调整为:
Alt(option) --> Ctrl --> Space <-- Ctrl <--Alt
Emacs不必记忆一个快捷绑定,单单只靠语义化就能掌握所有的键位绑定。
页面更新:2024-04-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号