在编写可执行脚本和声明性配置文件时,我经常发现不想添加文件名扩展名(例如Python)。许多语法高亮的文本编辑器(例如Geany)随后无法自动确定文件类型。
是否有任何标准方法来指示编辑器文件中源代码的类型?
在编写可执行脚本和声明性配置文件时,我经常发现不想添加文件名扩展名(例如Python)。许多语法高亮的文本编辑器(例如Geany)随后无法自动确定文件类型。
是否有任何标准方法来指示编辑器文件中源代码的类型?
Vim有一个叫做modeline的概念。模型行是指在文本文件的前5行或后5行之内的特殊格式化行,它允许您设置:setlocal
局部变量。例如,对于C语言:
/* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */
或 Ruby:
# vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab
Emacs有一个类似的概念,叫做文件变量。
文件变量可以在文件开头指定(在第一行或者如果有shebang行,则在第二行)以以下形式:
/* *-* mode: cc c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil *-* */
或者在结尾处:
# Local Variables:
# mode: ruby
# coding: utf-8
# c-basic-offset: 2
# tab-width: 2
# indent-tabs-mode: nil
# End:
jEdit将其称为缓冲区本地属性。它们必须位于前10行或后10行内,并且格式如下:
# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
jEdit还使用shebang行作为模式检测的备选方案。
有一个名为Komode(双关语)的插件可将模式行支持添加到Komodo Edit中:
# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
它还可以理解有限的Vim模型行。
许多其他编辑器也有自己的变体,或支持上述其中之一(通常是Vim)。
Ruby 1.9和Python都要求明确指定非ASCII源文件的编码。幸运的是,它们以与Emacs和Vim模型线兼容的方式进行。 (基本上,它们寻找字符串coding
,后跟非单词字符,后跟空格,后跟有效的编码名称。 Vim的fileencoding=
和Emacs的coding:
都满足这些要求。)
这里有一个简单的模型线生成器,它可以为Vim、Emacs和jEdit生成模型线。
通常,shebang行被用作备选方案。
例如,没有扩展名的Ruby脚本将以以下方式开头:
#!/usr/bin/env ruby
如果您使用非标准的 shebang,这适用于许多编辑器:
#!/usr/bin/env python3
# filetype=python