好友幻神的《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 .emacs_使用Emacs进行社交并跟踪您的待办事项列表

    emacs .emacs 去年,我为您带来了19天的2019年新(给您)生产力工具.今年,我采用了不同的方法:使用您可能会使用的工具构建一个环境,使您在新的一年中提高生产力或可能尚未使用. 使用Ema ...

  2. 在linux下修改emacs颜色字体,Emacs的字体设置方法总结

    Emacs的字体设置方法总结 在 X 下使用 emacs 时,如果字体配置不好,emacs 就会显得十分丑陋.而作为 emacs 的用户,每天相当长的时间都在盯着这个编辑器,如果字体不好看,对眼 睛是 ...

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

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

  4. emacs linux 教程,Emacs教程

    简介 没 有听说过 Emacs 吗?没有关系,花上30分钟就能了解和熟悉这个古老而强大 的编辑器.他被很多人称作世界上最强大的编辑器.用户从无数高手到IT民工到 普通文本编辑器用户,可以符合几乎所有人 ...

  5. emacs linux 教程,emacs初体验

    在Windows下欢快地使用emacs 使用linux开发环境 linux下无论是下载开发软件.安装库,还是系统的命令都比window要优秀. 因此使用虚拟机加xmanager可以体验到2个系统无缝切 ...

  6. emacs latex_使用Emacs Org模式轻松创建LaTeX文档

    emacs latex LaTeX是一个功能强大的系统,尤其是用于编写科学和技术文档的系统. 但是在LaTeX中编写文档可能会造成混乱,因为您需要了解很多命令,并且文本中充满了反斜杠,花括号和其他语法 ...

  7. emacs .emacs_使用Emacs应该做的6件事

    emacs .emacs 想象一下使用Python的IDLE界面编辑文本. 您将能够将文件加载到内存中,对其进行编辑并保存更改. 但是您执行的每个动作都将由Python函数定义. 例如,使一个单词全部 ...

  8. emacs mysql_使用Emacs作为MySQL的客户端

    1 配置.emacs (setq sql-mysql-options 1 配置.emacs (setq sql-mysql-options '("-C" "-f" ...

  9. emacs php 支持,emacs支持golang吗

    Emacs,著名的集成开发环境和文本编辑器.Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个vim. (推荐学习:go) EMACS,即Editor MACroS(编辑器宏)的缩写,最 ...

最新文章

  1. LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier
  2. APUE(第八章)进程控制
  3. angular2-baidu-map网站中使用百度地图
  4. 电脑cmd命令大全_电脑定时关机的方法(2)
  5. 你们是不是对QQ总在后台莫名其妙更新一些东西很反感
  6. python各种语言间时间的转化
  7. 南通大学计算机系本二,2012年南通大学计算机科学与技术学院江苏省内第二批本科(院校代码:1301)...
  8. 测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险
  9. 高级参数绑定(数组和List绑定)
  10. windows 下 LITE IDE go lang 安装配置使用
  11. 数字电子技术基础笔记
  12. qt视频教程qt入门教程嵌入式linux应用开发qt编程开发,QT项目实战教程-Qt应用项目实例开发视频教程...
  13. Win10如何使用命令释放IP和重新获取新IP
  14. opengl介绍 webGL Open Inventor、Cosmo3D、Optimizer 3DLabs
  15. Android直播开发之旅(15):libjpeg库的编译移植与使用
  16. 【LeetCode系列】数的奥秘之幂数与完全平方数
  17. 苹果开放降级_为什么不开放 iOS 降级验证通道?
  18. Ant 中的一些命令
  19. 科研中的部分依赖图(PDP)绘制
  20. 统计建模与R软件-第三章习题答案

热门文章

  1. 给站长与网络推广人员的文章
  2. manjaro下常用软件一览
  3. 经典快速制作套打证书模板(doc)大全
  4. 【最全面教程】搞定配置MySQL的各种幺蛾子!!
  5. 发布golang第三方包
  6. channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILE
  7. 编写一个java类,用来表示出部队中 军 师 旅 团这种树状数据结构,使上级能检索到下级,下级也能检索到上级
  8. linux mount u盘 exfat,CentOS 挂载 exfat 和 FAT32格式的U盘
  9. adb devices 出现offline的无敌解决办法
  10. c语言如何初始化程序,浅谈C语言的初始化