好友幻神的《Emacs之魂》正在火热连载中,群里人起哄要给他捧捧场。

作为一个学习Emacs屡败屡战的用户,这个场还是值得捧一下的。至少我是买了HHKB键盘的。。。

从我的键盘说起 - 有模式和无模式

下面是我的HHKB键盘的局部图:



与其他常规的键盘不同,我的键盘的Control键的位置,是常规布局的大小写锁定键的位置。为什么这么布局呢?

我们看看幻神在emacs人界用法中所介绍的emacs最常的快捷键吧:

C-f 后一个字符
C-b 前一个字符
C-p 上一行
C-n 下一行
M-f 后一个单词
M-b 前一个单词
C-a 行首
C-e 行尾
C-v 向下翻一页
M-v 向上翻一页
M-< 到文件开头
M-> 到文件末尾

C-x C-f "find"文件, 即在缓冲区打开/新建一个文件
C-x C-s 保存文件
C-x C-w 使用其他文件名另存为文件
C-x C-v 关闭当前缓冲区文件并打开新文件
C-x i 在当前光标处插入文件
C-x b 新建/切换缓冲区
C-x C-b 显示缓冲区列表
C-x k 关闭当前缓冲区
C-z 挂起emacs
C-x C-c 关闭emacs

其中,C表示Ctrl键,M表示Alt键,C-f表示按住Ctrl然后按f,
C-x C-s表示先按Ctrl+x,再按Ctrl+s,
C-x b表示先按Ctrl+x,再按b。

Ctrl键之常用,可见一斑。

这就引出一个著名的段子:因为emacs中大量使用Ctrl键,而普通键盘的Ctrl键位于小指管但是比较费力的键位下,emacs会导致左手小指容易损伤的段子层出不穷。为了提高效率,改键盘布局是最常用的办法之一。不信您试试,按Caps lock是不是比按Ctrl要容易,手指稍微移动一下就可以了。

另外,emacs对于Alt或者Esc的需求也不少,这两个键也是小指的管辖范围。

有模式和无模式

为什么emacs会如此大量地使用Ctrl和Alt组合键呢?原因很简单,emacs是个无模式的编辑器。相对而言,vi是个有模式的编辑器,分为命令模式和编辑模式。在命令模式下,j是向下移一行,k是向上移一行,h是左移,l是右移,手在基本键位上不动就可以快速移动。

由于命令模式下,大部分键都被当成命令了,输入这些键代表的字符怎么办?这就需要通过i命令,o命令等切换到编辑模式,在编辑模式下,可以正常输入字符。但是,在编辑模式下,大部分命令又没法使用了。使用命令的时候,还需要输入Esc来切回命令模式。

于是,emacs和vi的宗教战争,在有模式和无模式这一战场打了几十年。

emacs lisp和vimscript

做为编辑器圣战的双雄,除了基本功能之外,emacs和vim都有自己的扩展语言:emacs是emacs lisp,而vim是vimscript.

这两门都是不那么现代的语言。emacs lisp没有common lisp那么强大复杂,但是爱好者如云,至今不断有新的粉丝加入进来。而vimscript的爱好者几乎没有,有用perl写vim扩展的,也有用python写vim扩展的。。。

在宗教战争的两个分战场中,lisp占优势,emacs的平台有优势。而在模式之争上,vi的快捷键的优势使得它的用户数相对更多一些。

evil - emacs上模拟vi的模式

那么,emacs和vim真的是一直水火不融地宗教战争下去吗?对于emacs用户来讲,从来不是这样。emacs用户以emacs的可扩展性为武器,开发出了模拟vi模式方案的插件, evil就是其中最流行的一种。

vi用户还有一种有效的输出方式,就是采用leader键,把命令用leader键组合起来。

spacemacs

emacs的插件很多,配置起来也复杂,所以学习使用emacs最好的方式就是借鉴高手已经配好的配置方案。目前,比较流行的方案就是spacemacs.

spacemacs默认使用evil来模拟vi的模式,并且以空格space键作为leader key。

下面是spacemacs的界面抓图:

在默认模式下,输入空格键,就会弹出下一个键代表的命令,例:空格,然后f,显示的界面如下:

spacemacs的安装非常简单,只有一条命令:

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

至此,我们的emacs学习之旅正式开始。我们既学emacs,也学习vi的模式和leader key。同时,我们使用spacemacs,已经为我们默认配好了很多强大的插件,比普通版本要方便。

唯一不足的是,我们学的知识可能比幻神讲得人界方式更多一些,毕竟vi就是学习曲线比较陡的编辑器。但是,只要坚持下来,您会觉得值得的!

我也说说Emacs吧(1) - Emacs和Vi我们都学的更多相关文章

  1. 我也说说Emacs吧(2) - Emacs其实就是函数的组合

    Emacs本质上是函数的组合 从帮助上看emacs有何不同 Vim和Sublime Text等编辑器,本质上是一个编辑器. 比如我们看看vim的帮助,是这个风格的,比如我要看i命令的帮助: <i ...

  2. emacs使用本地emacs server模式打开远程文件

    使用emacs的用户都知道,一般要打开远程机器上的文件要使用TrampMode模式,调用方式例如以下: C-x C-f /remotehost:filename RET (or /method:use ...

  3. [daily][emacs][go] 配置emacs go-mode的编辑环境以及环境变量问题

    1. 安装go 安装go-mode 使用emacs编辑go代码的时候,你需要有正常可运行的go环境. 并且有emacs的go-mode package https://www.emacswiki.or ...

  4. emacs编译整个emacs.d目录

    $emacs 在emacs查看里面,输入: C-u M-x byte-recompile-directory 然后输入 ~/.emacs.d 即可.

  5. Emacs 配置文件

    以下是我整理的 emacs 配置文件,供刚开始玩 emacs 的同学参考.网上有人说:emacs 是神的编辑器,如果能够用到这样的编辑器,那这个人就是神了.从我个人的经验来看,emacs 是一把利器, ...

  6. 创建.emacs.d目录和.emacs文件

    1.双击bin下的addpm.exe 2.HKEY_CURRENT_USER->Software->GNU->Emacs 新建字符串值HOME,数值数据为emacs的安装路径 3.创 ...

  7. 打造最高效的科研环境之Emacs插件们

    0 盲人摸象 作为初学者,迫切的需求就是直接上手Emacs并打造包含自动补全命令在内的科研环境. 和网上众多的插件安装的教程相比,我认为找到一个与自己需求匹配的Emacs配置环境来得更方便. 本例中, ...

  8. CentOS 6.7 中安装Emacs 24.5

    Emacs 版本:http://mirror.bjtu.edu.cn/gnu/emacs/emacs-24.5.tar.gz CentOS 内核版本:2.6.32-573.el6.x86_64 参考资 ...

  9. windows8.1下常用编辑器安装配置(emacs/vim/sublime text3)

    一.下载:在emacs:http://mirrors.ustc.edu.cn/gnu/emacs/windows/里下载emacs-24.3-bin-i386.zip.解压到自定目录,双击bin文件夹 ...

随机推荐

  1. 20145307第二次JAVA学习实验报告

    20145307<Java程序设计>实验报告二:Java面向对象程序设计 实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4 ...

  2. Jquery4 过滤选择器

    学习要点: 1.基本过滤器 2.内容过滤器 3.可见性过滤器 4.子元素过滤器 5.其他方法 过滤选择器简称:过滤器.它其实也是一种选择器,而这种选择器类似 CSS3里的伪类,可以让不支持 CSS3 ...

  3. poj-2259 team queue(数据结构)

    第一遍看的时候立即想到了哈希表. 再想时觉得两个队列,一个用来排队伍之间的顺序,一个用来排队伍内部成员的顺序即足够了. DEQUE的时候先判断哪只队伍排在队首,之后再让该队伍中的首队员出列. 整体没有 ...

  4. Spring Boot 之restful风格

    步骤一:restful风格是什么? 我们知道在做web开发的过程中,method常用的值是get和post.可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富 ...

  5. LeetCode——merge-two-sorted-lists

    Question Merge two sorted linked lists and return it as a new list. The new list should be made by s ...

  6. mybatis的一对多

    1.配置文件 db.properties db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/demo?useUnic ...

  7. Android -- 多线程下载, 断点下载

    1. 原理图 2. 示例代码 需要权限 <uses-permission android:name="android.permission.INTERNET"/> &l ...

  8. 设计模式——迭代器(Iterator)模式

    概述 迭代器模式简单的说(按我目前的理解)就是一个类提供一个对外迭代的接口,方面调用者迭代.这个迭代接口至少包括两个方法:hasNext()--用于判断是否还有下一个,next()--用于取出下一个对 ...

  9. 在Windows使用VC编译ICU

    1 编译过程在Cygwin下进行,所以必须得安装Cygwin,并且加上Automake, autoconf, make, ar等选项 2 打开命令行窗口,设置环境变量,主要是可以启动cygwin的ba ...

  10. ECMAScript6教程目录

    ECMAScript 6 简介 let 和 const 命令 数组的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 Symbol Set 和 Map 数据结构 Pr ...