Linux 编辑器有没有什么方法可以不用文件扩展名来辨别编程语言?

Linux 编辑器有没有什么方法可以不用文件扩展名来辨别编程语言?

我在 Linux 上编辑一些没有语言文件扩展名的脚本,似乎编辑器,即纳米编辑没有应用语法高亮,因为文件名不使用语言扩展。

是否有一些参数需要传递或者一些设置可以使它们识别语言?

更新:

经过一番谷歌搜索后,我意识到 bash 具有这种能力,至少可以进行一些解析或检查顶部的 shebang 来确定语言。默认情况下,Ubuntu 不会安装完整的vim包,所以安装后,shell 文件被识别。我不知道纳米或者编辑, 但和它的图形对应部分就可以了。

答案1

这个问题无法得到普遍的回答,因为它适用于所有文本编辑器。

Vim 通过后缀识别文件。这是由其默认的启动脚本驱动的,您可以在 中自定义行为.vimrc

例如,我自己编写了一个名为的 C 程序autotab,它查看文件的内容并根据文件的格式确定 Vim 的shiftwidthtabstop设置。expandtab

当我在 Vim 中加载或重新加载文件时,该程序将分析内容,然后输出上述 Vim 参数,这些参数被插入到命令中set并执行。例如,如果发现文件使用两个空格的缩进,但显然混合了空格和八个空格的硬制表符,则程序将输出tabstop=8 shiftwidth=2 noexpandtab

可以使用完全相同的方法来选择语法突出显示。编写一个脚本,查看文件的某些行,猜测类型,然后生成命令:set syntax ...

file实用程序可用作脚本的基础。该程序的“魔法”数据库包含检测某些编程语言file的启发式方法。尝试在您的各种文件上运行并查看输出。您可能会惊讶于它识别内容的能力。因此策略可能是:file在文件上运行,捕获输出,将其分析为各种情况并输出正确的 Vim 咒语。然后将其挂接到.vimrc

GIT 仓库autotabhttp://www.kylheku.com/cgit/c-snippets/tree/autotab.c

答案2

首先,在Linux/Unix系统中,可以通过“Magic Number”识别文件类型,可以使用具有十六进制编辑功能的编辑器或直接使用十六进制编辑器检查此文件类型标识符。不幸的是,纯文本文件无法通过这种方式识别。

有关此主题的更多信息:魔法数字定义

可能的纯文本文件的解决方案是使用能够识别所用编程语言的编辑器。

或许 吉尼或者科学。它们支持不同的文件类型,但我不能说如果文件是由其他编辑器创建的,它们是否可以识别它……

相关内容