Bash vim红色高亮显示$()

Bash vim红色高亮显示$(),bash,vim,ubuntu,sh,Bash,Vim,Ubuntu,Sh,当我决定将函数移动到lib文件时,我正在编写一个脚本,但是当我打开lib文件时,所有的$(和连续的)都以红色突出显示,下面是一些脚本示例 TAB="$(printf '\t')" percent=$(echo "scale=2; $number/$total*100" | bc | sed -e 's/\.[[:digit:]]*//g') if [[ -z $(grep $site/post $max_lim) ]];then 文件类型是conf,但我在.vimrc中将其设置为sh语法 知道

当我决定将函数移动到lib文件时,我正在编写一个脚本,但是当我打开lib文件时,所有的
$(
和连续的
都以红色突出显示,下面是一些脚本示例

TAB="$(printf '\t')"
percent=$(echo "scale=2; $number/$total*100" | bc | sed -e 's/\.[[:digit:]]*//g')
if [[ -z $(grep $site/post $max_lim) ]];then
文件类型是conf,但我在.vimrc中将其设置为sh语法

知道发生了什么事吗

多谢各位


编辑:感谢您的快速回答,我发现这一行使vim将
*
后面指定的扩展名与语法sh匹配

au BufReadPost * set syntax=sh
我还认为在图书馆中使用shebang是不允许的,但这是一个很好的解决方案

无论如何,在中使用
g:is_bash
。vimrc返回一个找不到模式的错误


因此,我想做的是,因为我只在bash中编写,vim将任何没有扩展名的文件识别为bash

sh
的语法文件实际上处理几种不同类型的shell语法:
bash
ksh
,以及普通的old
sh
。由于您的conf文件无法识别为
bash
ksh
,因此它会返回到
sh
$(…)
sh
中不是有效的构造,因此它突出显示为错误

要解决此问题,您可以确保为文件设置了“g:is_bash”,以便
sh
语法脚本知道您的文件应高亮显示为
bash
code。请编辑您的问题,将您添加到
.vimrc
中的内容包括在内,以使文件使用
sh
语法突出显示。这将更容易建议设置“g:is_bash”的正确方法

更新:正如Alok所评论的,您应该能够将以下内容添加到文件中

#!/bin/bash

为了让vim知道要使用的正确语法高亮显示。

在我的例子中,我想保留
#/bin/sh
作为shebang行,因为并非每个系统都有可用的
/bin/bash

虽然原始的Bourne shell可能不支持
$(…)
语法,但现在大多数
sh
shell都兼容POSIX,并且。比如说,

  • 在Ubuntu上,
    /bin/sh
    /bin/dash
  • 在MacOS上,
    /bin/sh
    /bin/bash
  • 在阿尔卑斯山上,
    /bin/sh
    /bin/ash
所有这些都满足POSIX规范。传统上,如果我们想编写portable Shell,我们应该将shebang行保留为
#/bin/sh
。我们不应该把它改成
#/bin/bash
仅用于语法高亮显示,如果我们不打算使用任何bashism的话

好的,但是错误的红色高亮怎么办?问题在于Vim解释
#/bin/sh
作为参考,不支持
$(…)
。也许这是Vim向后兼容性的证明,或者可能没有足够的人关心。下面是一个描述相同行为的例子

无论如何,对我来说,最好的解决方案是在我的配置中设置
let g:is_posix=1
。有趣的是,如果您查看Vim的运行时文件,它相当于设置



关于Bourne shell如何成为Bourne的一段简短有趣的历史,Bourne再次成为Ubuntu上的
/bin/sh
的替代品,并最终被
dash
取代,可在以下网址找到

你是说红色?或者白色和bg=红色?现在,您可以
:set ft=sh
,但您可能希望发布~/.vimrc中您认为正在设置文件类型和文件名的部分,以便我们真正了解发生了什么。你也可以在文件的末尾添加以下内容:
\vim:set ft=sh
。作为旁白,你可以在
TAB=$'\t'
中指定一个文本制表符
bash
。只需注意,对我来说,红色突出显示与搜索匹配,
:noh
修复了如果“shebang行”出现这种情况,它似乎也会起作用在脚本文件中说它是一个bash脚本。对,我忘了提到这一点,因为听起来这个文件只是源代码,而不是自己执行的。不过,这绝对是最简单的修复方法。文档位于。这肯定是公认的答案。另一个根本不回答这个问题。