在编写可执行脚本和使用通用语言(例如Python)的声明性配置文件时,我经常发现在文件名中添加扩展名是不可取的。许多语法高亮文本编辑器(例如Geany)随后无法自动确定文件类型。
是否有任何标准方法可以向编辑者指示文件中的来源类型?
答案 0 :(得分:18)
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
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调用此buffer-local properties。必须坐在第一行或最后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:
都满足这些要求。)
这是一个简单的modeline generator,它为Vim,Emacs和jEdit生成模型。
答案 1 :(得分:6)
通常使用shebang线作为后退。
例如,没有扩展名的Ruby脚本将以:
开头#!/usr/bin/env ruby
答案 2 :(得分:0)
如果您使用的是非标准的shebang,这适用于许多编辑:
#!/usr/bin/env python3
# filetype=python