指示不带扩展名的文件中的编程语言
题
当编写可执行脚本和使用通用语言的声明性配置文件时(例如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