Indicate programming language in a file without extension

前端 未结 3 1133
-上瘾入骨i
-上瘾入骨i 2020-12-16 03:03

When writing executable scripts, and declarative configuration files that use a common language (eg. Python), I often find it undesirable to add an extension to the file nam

相关标签:
3条回答
  • 2020-12-16 03:35

    This works for many editors if you're using non-standard shebangs:

    #!/usr/bin/env python3
    # filetype=python
    
    0 讨论(0)
  • 2020-12-16 03:43

    Vim

    Vim has a concept called a modeline. A modeline is a specially formatted line either withinin the first or last 5 lines of the textfile, which allows you to :setlocal local variables. For example, for C:

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

    or Ruby:

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

    Some more documentation.

    Emacs

    Emacs has a similar concept, called File Variables.

    File Variables are either specified at the beginning of the file (in the first line, or if there is a shebang line, then in the second) in this form:

    /* *-* mode: cc c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil *-* */
    

    or at the end:

    # Local Variables:
    # mode: ruby
    # coding: utf-8
    # c-basic-offset: 2
    # tab-width: 2
    # indent-tabs-mode: nil
    # End:
    

    jEdit

    jEdit calls this buffer-local properties. The have to sit within the first or last 10 lines and look like this:

    # :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
    

    jEdit also uses the shebang line as a fallback for mode detection.

    Komodo Edit

    There is a plugin called Komode (pun intended) which adds modeline support to Komodo Edit:

    # komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
    

    It also understands a limited subset of Vim modelines.

    Others

    A lot of other editors also have either their own variants of this, or support one of the above (usually Vim).

    Python / Ruby encoding

    Both Ruby 1.9 and Python require that the encoding for non-ASCII source files be explicitly specified. Fortunately, they do this in a way that is compatible with both Emacs and Vim modelines. (Basically, they look for the string coding followed by a non-word character followed by whitespace followed by a valid encoding name. Both Vim's fileencoding= and Emacs' coding: satisfy these requirements.)

    Modeline Generator

    Here is a simple modeline generator, which generates modelines for Vim, Emacs and jEdit.

    0 讨论(0)
  • 2020-12-16 03:44

    Typically the shebang line is used as a fall-back.

    For example, a Ruby script without an extension would begin with:

    #!/usr/bin/env ruby
    
    0 讨论(0)
提交回复
热议问题