vim对.gz文件处理

遇到一个奇怪的问题,折腾了一下,感觉很有意思:

我在撰写 Sphinx文档 时, make html 报错:

sphinx执行 make html 报错
reading sources... [100%] linux/gentoo_linux/gentoo_ia32
/data/docs/github/huataihuang/cloud-atlas/source/linux/gentoo_linux/gentoo_ia32.rst:17: WARNING: Encoding 'utf-8-sig' used for reading included file '/data/docs/github/huataihuang/cloud-atlas/source/linux/gentoo_linux/gentoo_ia32/zcat_config.gz' seems to be wrong, try giving an :encoding: option

奇怪,我使用 vi zcat_config.gz 这个文件的内容,显示的完全正常:

zcat /proc/config.gz | grep CONFIG_IA32_EMULATION

但是,一旦用 cat zcat_config.gz 就看出异常了,完全是乱码

原因:

  • vim 可以直接编辑 .gz 压缩文件,实际上就是先解压,然后编辑文本

  • 如果用vim编辑一个空文件,但是这个空文件名有后缀 .gz ,则 vim 会默认这个有 .gz 后缀名的文件就是一个压缩文件,就会自动生成一个压缩文件(内部包含文本)

  • 此时这个文件虽然用vim编辑没有问题,以为是一个纯文本,但实际上已经被压缩了,此时使用 catfile 检查,就会看到乱码

  • 类似系统内核 /proc/config.gz 文件,都是需要使用 zcat 来检查的,也可以直接使用 vim 查看,总之,非常方便,但是也要注意这个默认对 .gz 后缀名的文件处理特点