为什么bash中的"Here strings"会改变后面的内容的语法颜色?

abh*_*bhi 6 vim bash

我正在编写一个bash脚本,在这里使用strings(<<<),请参阅下面的示例.该脚本工作正常并给出了预期的输出,但问题是(vim)编辑器语法颜色在使用此字符串的行之后全部搞砸了.任何线索为什么以及我如何解决它?

在此输入图像描述

作为文字:

# get all running screens
scrcmd=$(ps auxw|grep -i screen|grep -v grep|awk '{print $15}')
allscr=()
while read -r line; do
        allscr+=("$line")
done <<< $scrcmd

echo "got screens, now do something else"
Run Code Online (Sandbox Code Playgroud)

Dan*_*owe 13

shVim中的bash(真的)高亮模式是多用途的; 它试图覆盖POSIX sh,bash和ksh.你必须告诉它你特别想要bash.

:let b:is_bash=1
:set ft=sh
Run Code Online (Sandbox Code Playgroud)

之后应该正确强调.

如果你只关心bash,你可以将它作为.vimrc中的默认值:

let g:is_bash=1
Run Code Online (Sandbox Code Playgroud)

编辑:正如Charles Duffy在评论中指出的那样,如果你使用一条#!线,例如

#!/bin/bash

#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)

那么vim应该自己做正确的事情.这可能更容易,除非你有一些理由不想使用#!线条.

(即使这可能更容易,我在这里留下我的答案,因为在这种情况下你没有#!一行,这并不罕见,特别是在图书馆代码或预期会被采购,未执行的文件中.)