APP下载

Emacs配置与扩展技术

2019-06-28鲍彬武云涛

科技创新与应用 2019年16期
关键词:扩展配置

鲍彬 武云涛

摘  要:Emacs是高扩展性的编辑器,可通过配置支持多种复杂编辑模式。不同于其它编辑器的简单配置脚本,Emacs的配置和扩展是通过 Emacs-lisp语言完成的,Emacs配置普遍被认为是较为复杂的和难以掌握的。文章着重探讨并分析了Emacs配置与扩展的相关技术。

关键词:Emacs;Lisp;配置;扩展

中图分类号:TP391 文献标志码:A 文章编号:2095-2945(2019)16-0134-03

Abstract: Emacs is a highly extensible editor that can be configured to support a variety of complex editing modes. Unlike the simple configuration scripts of other editors, the configuration and extension of Emacs is done through the Emacs-lisp language. Emacs configuration is generally considered to be more complex and difficult to master. This paper mainly discusses and analyzes the related technologies of Emacs configuration and extension.

Keywords: Emacs; Lisp; configuration; extension

1 Emacs简介

Emacs是著名的文本编辑器,最初是在上世纪70年代完成。Emacs是“Editing MACros”的缩写,意为宏编辑器。不同于一般的编辑器,Emacs具有极强的可扩展性。在文本编辑之外,Emacs通过与其他工具结合起来能够支持各种语言程序开发,上网和新闻组,文件和系统管理,撰写文章等一系列功能,成为一个具有强大功能且高度集成的生产力工具。

2 Emacs与常见文本编辑器配置方式比较

2.1 Emacs和Vi比较

Emacs和Vi是深受程序员喜爱的两大编辑器,各有特点。Vi是著名的轻量级文本编辑器,在完成轻量级任务时有很大优势,比如简单调整系统配置,远程终端的简单访问和操作。Vi的强大之处在于其编辑快捷键易用,和终端无缝结合。相比之下,Emacs复杂度要高很多,但在处理复杂任务,大量不同类型的文件时,Emacs将更有优势。值得注意的是,Vi也需要通过一定配置才能发挥较强的功能,比如大部分程序员为了方便开发,还是结合多个较复杂插件将Vi配置为集成开发环境。在这个角度上,Vi扩展的编写不如Emacs用Lisp语言开发那么方便,虽然理论上Vi也是可以用通用语言Python去扩展的,但毕竟不是原生的扩展语言。事实上通过合理配置,Emacs其实是可以模拟大部分Vi的特性的,这也是目前比较流行的模式,不使用原生的Vi,而是把Vi的特性結合进入Emacs中,两者兼用。这个思路是目前大多数流行的Emacs配置采用的。

2.2 Emacs和Sublime Text,VS Code比较

近些年也有一些新的可扩展文本编辑器,比较有名的有Sublime Text,微软写的VS Code,这些工具也都意在提供高可扩展性的编辑工具,尤其是多种语言程序的开发工具。这些编辑器优势在于易于上手,其扩展性更多的是通过官方丰富的插件来完成的,对于新手更加友好。用户也可以通过简单脚本文件定制编辑器特性,不过其所支持的定制语言不够强大,定制复杂配置是不容易的。相比而言,Emacs的可扩展性更强,定制方式更加灵活,所以很多人依然选择使用Emacs而不是转入新的文本编辑工具。对于经验丰富的编程人员来讲,Emacs更容易按照自己的工作习惯加以配置和扩展,在众多工具中依然是最佳的选择。Emacs的另一个优势之处是可以和系统结合,不仅仅限制在集成开发环境这样一个功能,而是可以扩展为可以替代Office,图片浏览器,网页浏览器等软件的多功能集成工具。这是目前任何一款可扩展文本工具都是无法做到的,这也是Emacs作为一个古老软件至今依然保持开发活跃的原因。当然,Emacs开源和社区高度开放的特性也是其优势之处和更容易扩展的原因之一。

3 Emacs配置与扩展技术

3.1 Emacs-lisp扩展编程

Emacs配置与扩展可以通过Emacs-lisp语言开发。Emacs-lisp语言是Lisp语言的一种方言。Lisp是早期的程序设计语言之一,其语言设计源于lambda计算理论,语言简洁并能够优雅的支持目前主流的程序设计范式。Emacs-lisp包含完整的Lisp语言特性,这是由于Emacs底层用C语言实现了Lisp的解释器和基本的内置编辑函数。因此Emacs的大部分功能是由Emacs-lisp实现的,同样也可以用Emacs-lisp语言方便的进行扩展,进一步Emacs-lisp语言也可直接访问Emacs的内置功能函数接口。这样的特性使得使用Emacs-lisp进行程序设计和Emacs配置开发非常方便。

3.2 Emacs配置加载

Emacs的入口文件可以是~/.emacs或者~/.emacs.d/init.el。常见的方式是使用后者,因为后者有利于模块化配置程序。Emacs配置一般是有一定规模的复杂程序,模块化设计可以使配置程序易读易改。Emacs-lisp语言的每一个模块对应一个文件,在文件尾部使用provide使模块可被其它程序引用,引用方式是通过require指定,从而加载模块中的所有变量和函数,使其对当前程序可见。为了模块能被Emacs发现并正确加载,通常需要在init.el文件开始部分使用load-path指定所需所有模块的路径,作为加载配置的起始点。Emacs加载模块并非只有这一种方式,事实上,为了加快Emacs的启动速度,不是所有模块都在init.el初始化时加载。最好的加载实践是在Emacs启动时仅加载基本模块,其它功能模块时在被使用时动态加载,比如启动时不加载Python开发相关模块,而且在打开Python文件进行编辑时才加载。有两种方式可以实现动态模块加载,不使用第三方工具的情况下,可以用autoload设置动态加载的函数,结合宏with-eval-after-load指定动态加载配置代码,实现模块函数当调用时才加载,相关函数在模块加载后才执行。目前比较流行的方式是使用第三方工具use-package,该工具包定义了use-package宏,能够以简洁的方式指定模块中需要动态加载的函数和变量,以及指定配置代码与模块加载的相对顺序。

猜你喜欢

扩展配置
浅谈数据挖掘和自适应算法的应用
多维传播语境下的播音主持功能与拓展研究
简析电力系统继电保护技术及配置应用
一种智能家居系统自学习免配置方法
论高校网络防火墙的配置与管理
计算机Linux网络操作系统特点及服务器配置研究
财务管理内容扩展的路径与方法
浅谈小学英语教学中的情境教学法