9

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

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

4

3 回答 3

20

维姆

Vim 有一个叫做模式行的概念。模式行是文本文件的前 5 行或后 5 行中的特殊格式行,它允许您使用:setlocal局部变量。例如,对于 C:

 /* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */

或红宝石:

 # vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab

更多文档

Emacs

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:

j编辑

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)。

Python / Ruby 编码

Ruby 1.9 和 Python 都要求明确指定非 ASCII 源文件的编码。幸运的是,他们这样做的方式与 Emacs 和 Vim 模型兼容。(基本上,他们查找coding后跟非单词字符的字符串,后跟空格,后跟有效的编码名称。Vimfileencoding=和 Emacs都coding:满足这些要求。)

模型生成器

这是一个简单的模式行生成器,它为 Vim、Emacs 和 jEdit 生成模式行。

于 2009-12-31T12:38:13.673 回答
8

通常,shebang 线用作后备线。

例如,一个没有扩展的 Ruby 脚本会以:

#!/usr/bin/env ruby
于 2009-12-31T05:39:16.140 回答
0

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

#!/usr/bin/env python3
# filetype=python
于 2011-03-18T15:46:38.860 回答