gedit 语法颜色不会显示

gedit 语法颜色不会显示

我之前写了一些程序来编辑我一直记的日记。我通常不喜欢使用 gedit,我想为我的下一个“无 gui”项目保留我的 vim 技能。我用 gedit 编辑了其中一个用 bash 脚本编写的程序,即使在#!/bin/bash顶部,它也不会显示 bash 语法。所有其他程序似乎都运行良好。这是有问题的脚本。

#!/bin/bash
############################
# ok, this is going to be  #
# a remake of my first     #
# easy access log editing  #
# Program.                 #
############################

chmod 770 ~/.Secret_Files
vi ~/.Secret_Files/Log17
chmod 000 ~/.Secret_Files
sleep .5
echo 'Done'

(就像我对文档的微弱尝试?)

糟糕的事情就在这里,它只是显示了 askubuntu 中的语法颜色。

问题已回答,无需添加。

答案1

我不知道 gedit 如何处理无扩展名文件的语法高亮(对此有疑问:Gedit 可以为没有扩展名的文件设置默认高亮样式吗?),但肯定有一个插件可以处理模式行:

在此处输入图片描述

因此,如果您在前几行(或最后几行)中有以下形式的注释:

# vi: ft=sh #

它将使用 shell 语法高亮,并且与ft=perlPerl 语法高亮等等。

答案2

通用性解释:如果文件中的前两个字节是 16 位值 2321(十六进制),则该文件是要交给 argv[1] 中的另一个可执行文件的脚本。Argv[0] 是可执行文件的名称。

与 M$-DOS、Windows 等不同,Unix 类型的 O/S 不关心文件扩展名。文件名的最后 3 个字节恰好是“.sh”,但这对于内核来说是无用的。重要的是模式位和文件本身中第一个值的第一个 16 位整数。模式位表示存在可执行文件,而不管其名称结构如何。这些过去被称为“魔法数字”,并在 sys/magic.h 中定义。对于我们的示例,如果第一个值是 2321,则表示这是一个解释文件。预计下一个 16 位值将是 202f。如果是这样,文件中从位置 2 到接下来的 20 的字符串最好是真实二进制文件的路径名,或者其他魔法数字。该行的其余部分(大大简化)是传递给解释器的参数。一些混乱的代码将这些分配给 argv[0]、argv[1] 等。这基本上就是内核如何“执行”任意脚本而不需要知道何时/为什么/如何创建新的解释器。

进位:文件中的前两个字节(字符)决定了它将如何处理,是作为要加载和运行的二进制文件,还是作为将传递给可执行文件的参数。阅读内核源代码(或 libc?),然后阅读 magic.[ch] 等。

相关内容