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

Xia*_* Hu 1 syntax vim shell youcompleteme

我是vim和shell脚本的新手.我不确定是否存在真正的问题,或者只是我不理解vim或shell脚本,但我确实搜索了谷歌并没有得到答案.无论如何,这是我在vim中做shell脚本时得到的.我认为语法高亮不能正常工作.

见图片点击这里

filename=$(basename $file)
Run Code Online (Sandbox Code Playgroud)

Vim高亮$()红色的颜色.

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

Dan*_*owe 9

这与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
Run Code Online (Sandbox Code Playgroud)

请注意,打开文件时会设置模式.因此添加#!/bin/bash不会立即修复模式.您需要保存/退出文件,然后再次打开它,切换到bash模式.(或者使用本段上方的技巧.)