10
trimer小知识(1) Yaml文件开头注释是什么意思?
Eana Hufwe edited this page 2017-12-24 11:18:44 +08:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

编辑小狼毫的方案及配置项文件时,通常会看到这样文件开头:

# wubi86_double_key.yaml
# vim: set sw=2 sts=2 et:     
# encoding: utf-8

schema:
  schema_id: wubi86_double_key
  name: "五笔86双键版"
....

那么开头的注释有什么含义呢?

第一行详解

第一行比较简单一般要放文件名或者其他注释不要放正式内容。为了防止加了Bom的utf-8文件无法解析。 具体原因见, Rime 輸入方案設計書

鑑於一些文本編輯器會爲 UTF-8 編碼的文件添加 BOM 標記,爲防止誤將該字符混入文中, 莫要從文件的第一行開始正文,而請在該行行首以 # 記號起一行註釋

因为默认的文件存储格式是utf-8,而utf-8又分带bom和不带bom两种格式。 带bom会在开头添加几个字节方便程序判断一个文本是否为utf-8编码。

如果你是程序员要编写程序读写utf-8,还可以看看这里的bom详解 UTF8最好不要带BOM附许多经典评论

第二行详解

正式开始最重要的一行,就是第二行

# vim: set sw=2 sts=2 et: 

这是什么意思呢?

这一行有个学名叫modeline是vim专用的。 用vim打开这个文件时会自动运行该命令设置好阅读和编辑该文件的一些参数

StackOverflow上关于modeline的解释

命令的具体含义,参看下面的解答  

"vim中每个命令都是简写和全拼两种模式后面列出命令的全拼大家就知道什么意思了
set sw=2  "sw即shiftwidth,设置自动缩进 2 个空格
set sts=2 "即设置 softtabstop 为 2. 输入 tab 后就跳了 2 格
set et   "设置expandtab,即将tab扩展为空格,如果要取消这个选项,为 :set noet 
" vim的开头命令都是在前面加no表取消

命令之间是通过空格或者":"分隔的,最后那个":"起分隔作用,表示设置结束

所以总结一下就是编辑yaml文件的具体环境为

  • 自动缩进为2
  • tab键缩进相当于2个空格
  • 将tab键自动扩展为空格

当然也可以把上面的命令写在_vimrc中作为全局设置。 这样打开编辑其他的没有带modeline的文件时也可以使用统一的设置。

更多的vim设置

vim中还有一些其他的缩进相关的设置也列在这里

set tabstop=4 "实际的 tab 即为 4 个空格, 而不是缺省的 8 个

# 设置自动的缩进风格
set ai "设置自动缩进
set cindent "设置使用 C/C++ 语言的自动缩进方式

关于Vim的tabstop,softtabstop的区分以及与shiftwidthexpandtab组合使用的具体含义。参见下面的帖子

vim中tabstop、shiftwidth、softtabstop以及expandtab的关系