好友幻神的《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. 20145310 《Java程序设计》第9周学习总结

    20145310 <Java程序设计>第9周学习总结 教材学习内容总结 本周主要进行第十六章和第十七章的学习. JDBC全名Java DataBase Connectivity,是java ...

  2. # 20145314《信息安全系统设计基础》期中复习总结 Part B

    20145314<信息安全系统设计基础>期中复习总结 Part B 学习知识点内容总结 复习线索:http://group.cnblogs.com/topic/73069.html 本周的 ...

  3. 解读:Hadoop序列化类

    序列化(serialization)是指将结构化的对象转化字节流,以便在进程间通信或写入硬盘永久存储. 反序列化(deserialization)是指将字节流转回到结构化对象的过程. 需要注意的是,能 ...

  4. Understanding and Creating OWIN Middlewares - Part 1

    In my previous article, What is OWIN? A Beginners Guide we learned the basics of OWIN and the benefi ...

  5. integration asp.net web api with autofac and owin

    There is an example project showing Web API in conjunction with OWIN self hosting https://github.com ...

  6. TeeChart.Direct2D.dll的使用

    这个dll本身依赖于第三方的控件,SlimDX ,可以从 http://slimdx.org/ 下载.  .net4.0的版本区分x86和x64 帧数的概念 我们通常说帧数,简单地说,就是在1秒钟时间 ...

  7. Continue SQL query even on errors

    trymysql --force < sample_data.sql Mysql help section says -f, --force         Continue even if w ...

  8. Numpy学习2

    载入数据和保存数据 In [34]: arr = np.loadtxt("/home/hadoop/wujiadong/np.txt") In [35]: np.save(&quo ...

  9. webservice的cxf和spring整合客户端开发

    1.新建一个java项目 2.导入cxf相关的jar包,并部署到项目中 3.用命令生成客户端使用说明文档 wsdl2java -p com.xiaostudy -d . http://127.0.0. ...

  10. LA 5135 井下矿工(点—双连通分量模板题)

    https://vjudge.net/problem/UVALive-5135 题意:在一个无向图上选择尽量少的点涂黑,使得任意删除一个点后,每个连通分量至少有一个黑点. 思路: 首先dfs遍历求出割 ...