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

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

有帮助吗?

解决方案

典型地,shebang行被用作回退。

例如,不带扩展名的Ruby脚本将与开始:

#!/usr/bin/env ruby

其他提示

维姆

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 线作为模式检测的后备。

科莫多 编辑

有一个插件叫 小莫德 (双关语)这为 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: 满足这些要求。)

模型线生成器

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

本作品很多编辑,如果你使用非标准shebangs:

#!/usr/bin/env python3
# filetype=python
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top