Indicar linguagem de programação em um arquivo sem extensão
Pergunta
Ao escrever scripts executáveis e arquivos de configuração declarativos que usam uma linguagem comum (por exemplo.Python), muitas vezes acho indesejável adicionar uma extensão ao nome do arquivo.Muitos editores de texto com realce de sintaxe (por exemplo.Geany) subsequentemente não conseguem determinar automaticamente o tipo de arquivo.
Existe algum método padrão para indicar aos editores o tipo de fonte do arquivo?
Solução
Normalmente, a linha shebang é usada como alternativa.
Por exemplo, um script Ruby sem extensão começaria com:
#!/usr/bin/env ruby
Outras dicas
Vim
O Vim tem um conceito chamado modelar.Uma modeline é uma linha especialmente formatada nas primeiras ou últimas 5 linhas do arquivo de texto, que permite que você :setlocal
variáveis locais.Por exemplo, para C:
/* vi: set filetype=c fileencoding=UTF-8 shiftwidth=4 tabstop=4 expandtab */
ou Rubi:
# vi: set filetype=ruby fileencoding=UTF-8 shiftwidth=2 tabstop=2 expandtab
Mais um pouco de documentação.
Emacs
O Emacs tem um conceito semelhante, chamado Variáveis de arquivo.
As variáveis de arquivo são especificadas no início do arquivo (na primeira linha ou, se houver uma linha shebang, na segunda) neste formato:
/* *-* mode: cc c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil *-* */
ou no final:
# Local Variables:
# mode: ruby
# coding: utf-8
# c-basic-offset: 2
# tab-width: 2
# indent-tabs-mode: nil
# End:
j
jEdit chama isso propriedades locais do buffer.Eles devem ficar entre as primeiras ou últimas 10 linhas e ter a seguinte aparência:
# :mode=ruby:indentSize=2:tabSize=2:noTabs=true:
jEdit também usa a linha shebang como substituto para detecção de modo.
Edição Komodo
Existe um plugin chamado Komode (trocadilho intencional) que adiciona suporte modeline ao Komodo Edit:
# komode: le=unix language=ruby codepage=utf8 tab=2 notabs indent=2
Ele também compreende um subconjunto limitado de modelos do Vim.
Outros
Muitos outros editores também têm suas próprias variantes ou suportam uma das opções acima (geralmente Vim).
Codificação Python/Ruby
Tanto Ruby 1.9 quanto Python exigem que a codificação para arquivos de origem não-ASCII seja especificada explicitamente.Felizmente, eles fazem isso de uma forma compatível com os modelos Emacs e Vim.(Basicamente, eles procuram a string coding
seguido por um caractere que não seja uma palavra seguido por um espaço em branco seguido por um nome de codificação válido.Ambos Vim fileencoding=
e Emacs' coding:
satisfazer esses requisitos.)
Gerador de Modelina
Aqui está um simples gerador de modelina, que gera modelos para Vim, Emacs e jEdit.
Isso funciona para muitos editores se você estiver usando shebangs não padrão:
#!/usr/bin/env python3
# filetype=python