在没有扩展名的文件中指示编程语言

时间:2009-12-31 05:35:06

标签: programming-languages text-editor syntax-highlighting file-extension file-type

在编写可执行脚本和使用通用语言(例如Python)的声明性配置文件时,我经常发现在文件名中添加扩展名是不可取的。许多语法高亮文本编辑器(例如Geany)随后无法自动确定文件类型。

是否有任何标准方法可以向编辑者指示文件中的来源类型?

3 个答案:

答案 0 :(得分:18)

的Vim

Vim有一个名为modeline的概念。模式行是在文本文件的第一行或最后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

Some more documentation

的Emacs

Emacs有一个类似的概念,名为File Variables

文件变量在文件的开头指定(在第一行,或者如果有一个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的

jEdit调用此buffer-local properties。必须坐在第一行或最后10行内,看起来像这样:

# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:

jEdit还使用shebang线作为模式检测的后备。

Komodo Edit

有一个名为Komode的插件(双关语),它为Komodo Edit添加了模式支持:

# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2

它也了解Vim模型的有限子集。

其他

许多其他编辑也有自己的变体,或者支持上面的一个(通常是Vim)。

Python / Ruby编码

Ruby 1.9和Python都要求明确指定非ASCII源文件的编码。幸运的是,他们以与Emacs和Vim模型兼容的方式执行此操作。 (基本上,它们会查找字符串coding,后跟一个非单词字符,后跟空格后跟一个有效的编码名称.Vim的fileencoding=和Emacs'coding:都满足这些要求。)

Modeline Generator

这是一个简单的modeline generator,它为Vim,Emacs和jEdit生成模型。

答案 1 :(得分:6)

通常使用shebang线作为后退。

例如,没有扩展名的Ruby脚本将以:

开头
#!/usr/bin/env ruby

答案 2 :(得分:0)

如果您使用的是非标准的shebang,这适用于许多编辑:

#!/usr/bin/env python3
# filetype=python