EMACS-DOCUMENT

=============>集思广益

用Emacs编辑yaml文件

想当年,在90年代后期,那会儿我才开始编程,XML风靡一时. 人们把它当成是灵丹妙药,从数据存储到数据展现与处理,到处都是XML. 然而正如Joel Spolski所指出的,人们 最终发现 虽然它尝试将复杂度限制的对普通人来说可接受的程度,但是也使得人们在写标签时变得很繁琐,毕竟 <> 在qwerty键盘上相距甚远.

进入新纪元后,web开始风行,到处流行起了"web services",结果人们发现XML并没有当初想的那么好用. 于是开始使用一种称为Json的格式替代XML,Json可以以跟XML类似的方式实现计算机间的相互通讯.

不过人们又发现,json也不是那么适合于web services之间通讯,毕竟它本来是设计用来在编程语言之间序列化对象用的. 而且面对那一堆的 {} [] 括号,也挺麻烦的.

最终,随着标签语言的普及,yaml横空出世了.

大多数新开发的软件都开始使用yaml, 所有的containers software ecosystem都使用yaml来进行配置. 因此,很多时候你都必须要与yaml打交道.

我对yaml无所谓喜不喜欢, 我只知道,当yaml会随着体积的增长而变得不可读. 你根本分不清哪些block是属于哪一个的,也搞不清楚要添加多少缩进才能与800行之外的block对齐.

这简直让我觉得抓狂. 由于我经常要写一些巨大的kubernetes/OpenShift yaml 文件,我经常要花大把的时间来搞清楚到底要缩进多少.

有人可能会说,你不是也用python吗,python也是用tab区分层次的呀. 是的,我用python有10年了,而这也没有对我造成什么困惑. 但这是因为:第一,我从不会写超过5000行的函数; 第二,我Emacs的python mode精心配置过了,能帮我自动解决这个问题.

终于讲到正题了, 我们需要好好地配置一下编辑器才行. 下面就讲讲我是如何配置Emacs,使得编辑这么巨大的yaml文件变得可以忍受.

闲话不多说, 下面这些emacs扩展都是我认为可以帮助编写yaml的:

Highlight Indentation for Emacs

2016-09-07__09-06-21-543.png

该mode会用一个bar来显示当前的缩进.

Smart Shift

t.gif

该mode不会为你显示缩进,但是可以让你缩进一段文字变得简单. 默认情况下,你需要使用命令 Control-C Tab 来缩进一段文字,还需要在命令前加个数字的前缀参数. 举个例子来说, C-u 4 Control-C Tab 会让一段文字缩进4个空格. 而Smart shift会极大的简化这一过程.

Flycheck-mode

2016-09-07__09-24-14-5881.png

当你在编程时,不管是什么语言,都应该开启该功能, 该插件会用ruby-yaml库来校验你的yaml文件并显示出错误的地方.

aj-toggle-fold

2016-09-07__09-36-55-32078.png

该函数是我从stackoverflow上找到的,它的作者同时也是 Highlight-Indentation-for-Emacs 的作者. 这个函数的作用就是折叠起所有比当前行更缩进的代码. 是一个用来显示当前文件大纲的好工具.