【问题标题】:Within how many lines from the beginning do various directions have to be placed?从一开始有多少行必须放置不同的方向?
【发布时间】:2016-07-04 02:10:18
【问题描述】:

注释字符# 后面有各种方向,它们以特定方式解释。

  • UNIX 社帮:#!/usr/bin/env ruby
  • 编码魔法注释(用于 Ruby 1.9):#coding: UTF-8
  • 冻结字符串文字编译指示:#frozen_string_literal: true
  • 文本编辑器(如 emacs)的 ruby​​ 模式方向:#!ruby
  • vim编码方向:#vim:set fileencoding=euc-jp

很明显,它们必须放在文件开头附近才能正常工作,但是当它们有多个时,它们不能都放在第一行。它们必须放在文件开头的多少行内?它们之间的相对顺序是否相关?决定它们的规则是什么?

如果有我上面列出的以外的,请补充。

【问题讨论】:

  • 在 Vim 模式行的特定情况下,它实际上并不需要位于顶部; Vim 检查文件的前五行(虽然这个数字可以用modelines 设置)... hashbang 需要在第一个线......我不知道所有其他人......(......这是一个有点广泛的问题......)
  • 这实际上是四个问题,因为这些行是由不同的程序(shell、ruby、emacs 和 vim)解释的。
  • @Stefan shell 没有查看 hashbang,这是一个链接器和/或内核功能(我不确定它在哪里实现确切,这可能因系统而异,但肯定不是外壳)。
  • @Carpetsmoker 是的,那不准确。
  • Emacs 不需要/想要 #!ruby 东西,而是识别 #!/usr/bin/ruby 行或 # -*- ruby -*- (最多可以在第二行,并且只有在第一行是#!, IIRC)。

标签: ruby unix vim emacs


【解决方案1】:

(这是一个社区 wiki 答案。它不完整,所以请添加您的发现。)


#!/usr/bin/env ruby

  • UNIX shebang
  • 必须出现在 shell 脚本第一行的左边距
  • 由内核解释,一些文本编辑器使用它来确定文件类型

#coding: UTF-8

  • 编码魔术注释
  • 如果第一行是 shebang,则必须出现在第一行或第二行,但可以松散地格式化,例如# -*- coding: utf-8 -*-
  • 由 Ruby 1.9+ 解释

#frozen_string_literal: true

  • 冻结字符串文字编译指示
  • 外观?
  • 由 Ruby 2.3 解释

# -*- mode: ruby -*-

  • Emacs 文件局部变量
  • 如果第一行是 shebang,则必须出现在第一行或第二行
  • 由 Emacs 解释

#vim:set fileencoding=euc-jp

  • Vim 模式行
  • 必须出现在前五行或后五行内,尽管此数字可通过 modelines 设置进行配置
  • 如果启用了modeline 设置,则由 Vim 解释(默认情况下启用,root 除外)。

【讨论】:

  • 冻结字符串文字编译指示实际上已经被很好地指定了,这在 Ruby 社区中(不幸的是)相当不寻常。我特别记得该文件中明确提到了它可以出现的行以及在什么情况下。不过,我不记得它在哪里。可能是 2.3 版本说明、2.3 变更日志或 Ruby 问题跟踪器上的功能请求讨论。
  • encoding pragma 是专门设计的,因此 Emacs 和 Vim 模式行也是合法的 Ruby 编码 pragma。
  • 我相信,但目前无法验证,编码编译指示 必须 是(可选)shebang 之后的第一行,而冻结的字符串文字编译指示 必须 是可选的 shebang 和/或可选的编码杂注之后的第一行。我不确定中间是否允许空行。
  • 我可以确认“Frozen String Literal Pragma”。如果第一个是shebang,则在第二行工作。没有检查其他选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2013-09-14
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多