Bash vim红色高亮显示$()
当我决定将函数移动到lib文件时,我正在编写一个脚本,但是当我打开lib文件时,所有的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语法 知道
$(
和连续的)
都以红色突出显示,下面是一些脚本示例
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
,以及普通的oldsh
。由于您的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
#/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脚本。对,我忘了提到这一点,因为听起来这个文件只是源代码,而不是自己执行的。不过,这绝对是最简单的修复方法。文档位于。这肯定是公认的答案。另一个根本不回答这个问题。