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

Mat*_*ner 9 file-extension programming-languages file-type syntax-highlighting text-editor

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

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

Jör*_*tag 19

VIM

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

 /* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */
Run Code Online (Sandbox Code Playgroud)

或者Ruby:

 # vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab
Run Code Online (Sandbox Code Playgroud)

更多文档.

Emacs的

Emacs有一个类似的概念,叫做File Variables.

文件变量在文件的开头(在第一行中,或者如果有一个shebang行,则在第二行中)以这种形式指定:

/* *-* mode: cc c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil *-* */
Run Code Online (Sandbox Code Playgroud)

或者最后:

# Local Variables:
# mode: ruby
# coding: utf-8
# c-basic-offset: 2
# tab-width: 2
# indent-tabs-mode: nil
# End:
Run Code Online (Sandbox Code Playgroud)

jEdit的

jEdit调用此缓冲区本地属性.必须坐在第一行或最后10行内,看起来像这样:

# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
Run Code Online (Sandbox Code Playgroud)

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

科莫多编辑

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

# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
Run Code Online (Sandbox Code Playgroud)

它还了解Vim模型的有限子集.

其他

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

Python/Ruby编码

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

Modeline Generator

这是一个简单的模式生成器,它为Vim,Emacs和jEdit生成模型.


Bob*_*man 7

通常,shebang线用作后备线.

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

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)