vim 中 shell 脚本的错误语法突出显示

Wrong syntax highlight for shell script in vim

我是 vim 和 shell 脚本的新手。我不确定是否存在真正的问题,或者只是我不理解 vim 或 shell 脚本,但我搜索了 google 并没有得到任何答案。无论如何,这就是我在 vim 中执行 shell 脚本时得到的结果。而且我认为语法突出显示无法正常工作。

filename=$(basename $file)

Vim 以红色突出显示 $()

顺便说一句:我在 Mac 上使用 gvim 8.0 并安装了 YCM,如果相关的话。

这与 Vim 的 shell 语法的行为有关。它具有三种模式:posix shell、ksh 和 bash。您正在使用 bash 语法,但 Vim 将其呈现为 posix shell(默认)。

这是 Vim 8.0 中此代码的 3 个不同版本的屏幕截图。

顶级版本只是您在屏幕截图中发布的代码。默认使用posix shell模式,可以看到有红色高亮显示。

在中间版本中,我在文件的开头添加了#!/bin/sh。这仍处于 posix 模式,并且仍然有红色高亮显示。

在底部,你可以看到我切换到 #!/bin/bash。这会触发 bash 行为,现在您可以看到 bash 特定语法不再标记为错误。

#! 行用于自动检测文件类型。但是,如果缺少它,如果您愿意,仍然可以强制模式。

:let b:is_bash=1
:set ft=sh

请注意,模式是在打开文件时设置的。所以添加 #!/bin/bash 不会立即修复模式。您需要 save/exit 文件,然后再次打开它,以切换到 bash 模式。 (或者使用本段上方的技巧。)