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

时间:2017-03-07 02:22:13

标签: bash vim

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

enter image description here

正如文字:

# 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"

1 个答案:

答案 0 :(得分:13)

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

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

之后应该正确地突出显示。

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

let g:is_bash=1

编辑:正如Charles Duffy在评论中指出的那样,如果您使用#!行,例如

#!/bin/bash

#!/usr/bin/env bash

然后vim应该自己做正确的事情。这可能更容易,除非你有一些理由不想使用#!行。

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