带你见识一下传说中的Emacs

本文经过与VSCode做对比,来简单地介绍Emacs的基本功能、特色,以及一些插件。本文所说的Emacs指的是GNU Emacs,下文简称Emacs。git

基本概念

  • Emacs是一个文本编辑器,就像VSCode那样。它能够用来写代码、Markdown,以及其它任何纯文本;
  • 在Emacs中打开的每一个文件都有一个“主模式”(major mode),就像在VSCode中每一个文件均可以设置一种语言模式;
  • 除了主模式,在Emacs中还能够同时启用多个“次模式”(minor mode)。每个次模式均可以提供本身的个性化功能;
  • 能够用一门叫ELisp的编程语言为Emacs开发插件,扩展新功能。有许多现成的插件能够安装使用。

与VSCode对比

接下来经过与VSCode做对比,来直观地感觉一下Emacs的基本功能。程序员

外观

Emacs的官网上有一张应用截图github

Emacs的官网截图

第一眼看起来和VSCode仍是很是不同的正则表达式

VSCode的官网截图

默认的Emacs界面上也会有菜单栏、工具栏,以及底下的状态栏(在Emacs中其实这一行叫作mode line),这些元素在VSCode上也能够找到。VSCode通常给人的印象还有侧边栏、资源管理器视图,以及minimap视图。Emacs的默认底色是白色,而VSCode则是黑色。shell

键盘操做

Emacs有着丰富的快捷键(在Emacs中称之为key binding),但一些常见的功能的快捷键与VSCode等其它软件并不相同,以下表所示编程

Emacs VSCode
新建文件 ⌃x ⌃f ⌘n
打开文件或目录 ⌃x ⌃f ⌘o
保存文件 ⌃x ⌃s ⌘s
另存为 ⌃x ⌃w ⇧⌘s
撤销 ⌃x u ⌘z
剪切 ⌃w ⌘x
复制 ⌥w ⌘c
粘贴 ⌃y ⌘v
查找 ⌃s ⌘f

在上表中,表示control键、表示Mac上的command键、表示shift键,表示Mac上的option键。此外,在Emacs中还可使用control键搭配pnbf来上下左右移动光标,不须要移动手臂即可以在编辑的文件中处处移动,提升效率。VSCode也可使用Emacs风格的快捷键,以下图所示编程语言

文件管理

VSCode自带美观大方的标签页功能,此外还能够将编辑器横向及纵向拆分,以下图所示编辑器

Emacs默认是没有标签页的功能的,但也支持切割编辑器,好比在下图中,就将编辑器分为左右两部分,而且左侧还被分为了上下两部分,这三个区域能够展现相同或不一样的三个文件。函数

默认的编程语言支持

VSCode支持很是多的编程语言,点击窗口右下角的语言模式即可以看到这份清单工具

Emacs虽然没有这么一份清单,但支持的语言的数量也是不遑多让的。不过仅仅是默认的Emacs的话,对编程语言的支持没有VSCode那么开箱即用。例如,比起Emacs,VSCode默认对JavaScript的支持就很好,不只仅有语法高亮、自动补全,而且还有基于变量类型、函数定义,以及导入的模块等信息实现的智能补全,而Emacs只有平凡的基于文本的语法高亮和自动补全罢了。

搜索功能

除了按下⌘f在文件内搜索以外,VSCode左侧工具栏中有一个名为搜索的入口,能够实如今打开的项目的全部文件中搜索特定内容的功能,而且还能用于替换。Emacs尽管没有这么一个GUI入口,但提供了grep命令来作到一样的事情。

在Emacs中按下⌥x后输入grep并按回车,便会在minibuffer中等待使用者的进一步输入

显然,这是直接调用了同名的命令行程序grep来实现搜索的,控制选项比VSCode的搜索功能要丰富许多。

集成git

git能够说已经成为了平常开发中不可或缺的一个工具,若是可以在编辑器内方便地调用git的话会大大提升效率。VSCode经过左侧工具栏的源代码管理入口提供了这个功能,在Emacs中则是经过一个叫作VC dir的主模式提供这个功能。

在Emacs中按下快捷键⌃x v d,而后输入使用git管理的项目的目录地址,便会打开一个新的编辑区域

当处于这个模式下时,会有一些新的快捷键能够用,好比将光标移动到显示edited的行上按下等号键,能够打开另外一个编辑区域查看该文件的修改内容;按下m键能够选中光标所在行的文件,而后按v键打开一个新的编辑区域来填写commit message,写完以后按下⌃c ⌃c提交(即调用git commit命令);最后按下q键能够退出VC dir模式的编辑区域。

集成终端

在VSCode中经过选中顶部菜单的“查看”,再点击“集成终端”,即可以打开命令行,而后像平时在其它的终端模拟器中那样使用命令。Emacs中也能够打开终端,方法是按下快捷键⌥x而后输入eshell并回车,而后Emacs便会在当前窗口中打开一个名为*eshell*的编辑区域,显示命令行提示符和闪烁的光标,并等待使用者的进一步交互。

有意思的是,这不是一个真正的命令行程序。好比在*eshell*中输入which pwd,输出结果是eshell/pwd is a compiled Lisp function in ‘em-dirs.el’.。也就是说,eshell中的某一些命令是Emacs从新实现的;此外,在*eshell*中能够运行Emacs的扩展语言——ELisp。好比输入(+ 1 1)并按下回车,会输出2。

扩展能力

VSCode有一个插件市场

Emacs也有一个,不过得认可这个网页确实没有VSCode阵营的吸引人

在Emacs中按下⌥x后输入package-install回车,Emacs会等待用户输入要安装的插件的名字——能够按下键(Mac上的tab键)让Emacs尝试自动补全。确认名字无误后再按回车即可以安装使用了——但通常还须要作一些微调。

炫酷的特性和插件

除了上面与VSCode对比的一些基本操做之外,Emacs还有自身的一些特点功能,更有世上的众多优秀程序员为Emacs贡献了不胜枚举的优秀插件,它们极大地扩展了Emacs的能力,提高了文字编辑这项活动的效率,甚至超越了文字编辑。

内置的功能

颜色主题

Emacs也能够安装颜色主题来改变外观。我比较喜欢的一款主题是gruvbox-light-soft,只须要在Emacs的配置文件中写上(load-theme 'gruvbox-light-soft t)便可启用。在这个主题的仓库主页能够看到一些效果图。

将当前行居中或置顶

Emacs能够用纯键盘的操做,将光标当前所在的行移到窗口的中间来显示。我特别喜欢这个功能,以前用VSCode时候一直想找这个功能的等价物,惋惜没找着。在Emacs中,按下一次control+l,光标所在的行就会移动到窗口的中间;按下第二次,则移动到窗口的顶部展现;再按一次,会去到窗口的底部。若是再按一次,那么就跟第一次同样回到窗口的中间。每当Emacs正在编辑的内容已经去到屏幕上较低的位置时,我便会用这个功能校订一下。

比起用鼠标拖动滚动条或者用滚轮来滚动,我更喜欢这种表意更清晰的方式。

纯键盘选中一片区域

在Emacs中能够用单击鼠标右键的方式来选中一片区域。当按下鼠标右键的时候,从光标所在的位置开始,到鼠标点击的位置结束的内容便会被选中。但我我的更喜欢纯键盘的操做,首先是在要选中的内容的起点按下快捷键⌃@,这时候Emacs会在minibuffer中打印一条Mark set的消息。而后移动光标——用方向键仍是用一系列的快捷键,甚至直接跳转到某一行也能够——到待选中的内容的终点。这时候加在起点和终点间的内容便会被选中,它们会有特殊的背景色,以下动图所示

由于按⌃@实在是太别扭了,因此我将这个快捷键修改成了⌥␣。若是更喜欢鼠标操做的话,也能够像在VSCode中那样,在终点按住shift键再单击鼠标左键。

矩形编辑

在VSCode中按住shiftoption键,再单击鼠标右键并拖动就能够选中一片矩形的区域,在Emacs中也支持这样的矩形编辑的功能。像下图这样,先定位到要选中为矩形区域的左上角按下⌃@,再移动光标到目标矩形区域的右下角,最后按下快捷键⌃x r k便可。

惊艳的插件

快速跳转

Emacs自己支持跳转到指定的某一行,只须要按下快捷键⌥g ⌥g而后输入行号并回车便可。但我通常是不显示行号的,因此这个功能其实比较少用。我使用一个名为avy的插件来加强跳转功能,主要用的是它提供的avy-goto-line函数。依照这个插件的文档,我为这个函数配置了快捷键⌥g f,所以当我想要快速地跳转到屏幕上可见的区域中、离光标所在位置稍微有点远的行时,我便按下这个快捷键,而后按照提示按下相应的英文字母键既可,具体效果参见下面的演示

发出HTTP请求

VSCode中有一个叫作REST Client的插件,Emacs中则是有一个叫作restclient.el的主模式。借助于restclient.el即可以直接在一个文本文件中写好本身要发出的HTTP请求的内容,而后一键触发。以前我是用Insomnia这个工具的,尽管它很强大,但不少时候我不须要那么强大的功能,并且Insomnia消耗内存比较多,因而我便回到restclient.el上了。restclient.el的效果大体以下图所示

加强的git集成功能

尽管Emacs自带了VC dir这个主模式,但我更喜欢用magit这个插件,尤为是它的magit-discard功能,能够在查看代码的差别的过程当中方便地舍弃一些没必要要的修改(例如添加一行console.log的调用)。例以下图,经过按下n将光标移动到某一片修改上再按下k键,Emacs便会询问使用者是否要“丢弃”这一块改动。若是按下y,那么这一块被选中的区域的内容便会恢复到git当中未修改的状态。

加强的文件内搜索功能

Emacs默认的搜索使用的是search-forward函数,插件swiper提供的功能更强大——不只能够是字符串的彻底匹配,也能够基于正则表达式来搜索,而且展现效果更直观,以下图所示

代码片断工具

VSCode自带了一个“用户代码片断”的功能(经过顶部菜单“Code”,再选中“首选项”能够看到),能够用来定义一些短语,这些短语会在被选中的时候展开为完整的内容。Emacs有一个名为yasnippet的插件也提供了相似的功能,但定义代码片断的语法不一样。而且,yasnippet支持在短语的定义中嵌入ELisp代码,扩展性远远高于只能使用字符串及占位符的VSCode的等价功能。

其它

Emacs还有许多有意思的插件,好比dimmer.el,可让当前没有得到焦点的窗口显示得黯淡一点;ledger-mode,能够用Emacs来记帐。这里就不一一列举了,各位有兴趣的话能够本身摸索Emacs,相信会遇到本身喜欢的插件的。

总结

比起家大业大的VSCode,Emacs算不上是开箱即用。它没有VSCode那么友好的界面和平易近人的操做方式,人气也没有VSCode那么旺,当遇到问题的时候可能没那么好求助到人,而且学习曲线(小众的预设快捷键、冷门的扩展语言)也比较高。但Emacs的扩展能力很强,现有的插件已经很丰富了,能够知足大部分的需求,遇到问题也能够到有模有样的论坛求助。若是喜欢折腾的话,Emacs会是一个不错的选择,至少我本身用得很开心。

阅读原文

相关文章
相关标签/搜索