Vnd*_*tta 8 vim bash 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
Run Code Online (Sandbox Code Playgroud)
文件类型是conf,但我在.vimrc中将其设置为sh语法
知道发生了什么?
谢谢
编辑:感谢您的快速回答,我发现这行使得vim与*具有语法sh 后面指定的扩展名的文件匹配
au BufReadPost * set syntax=sh
Run Code Online (Sandbox Code Playgroud)
我也认为不允许在库中使用shebang,但这是一个很好的解决方案
无论如何g:is_bash在.vimrc中使用都会返回找不到模式的错误
所以我想做的是因为我只用bash写,vim识别任何没有扩展名的文件作为bash
che*_*ner 13
对于语法文件sh实际上处理的几种不同类型的外壳语法:bash,ksh,和普通的旧的sh.由于您的conf文件未被识别为bash或ksh,它会回退到sh.$(...)不是有效的构造sh,因此它会突出显示为错误.
要解决此问题,您可以确保为文件设置了"g:is_bash",以便sh语法脚本知道您的文件应该突出显示为bash代码.请编辑您的问题以包含您添加到您的内容,.vimrc以使文件使用sh语法高亮显示.这样可以更容易地建议设置"g:is_bash"的正确方法.
更新:正如Alok评论的那样,您应该能够将以下内容添加到文件中
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
让我们vim知道正确的语法高亮使用.
就我而言,我想保留#!/bin/sh为 shebang 行,因为并非每个系统都/bin/bash可用。
尽管原始的 Bourne shell 可能不支持该$(...)语法,但sh现在大多数shell 都符合 POSIX,并且POSIX 规范支持此语法。例如,
/bin/sh是/bin/dash./bin/sh是/bin/bash./bin/sh是/bin/ash。所有这些都满足 POSIX 规范。传统上,如果我们想编写可移植的 Shell,我们应该将 shebang 行保留为#!/bin/sh. #!/bin/bash如果我们不打算使用任何 Bashisms,我们不应该将它更改为仅用于语法突出显示。
好的,但是错误的红色突出显示怎么办?问题在于 Vim 解释#!/bin/sh为对1979 年的原始 Bourne shell的引用,不支持$(...). 也许这证明了 Vim 的向后兼容性,或者可能没有足够的人关心。这是描述相同行为的相关 GitHub 问题。
无论如何,对我来说最好的解决方案是let g:is_posix = 1在我的配置中进行设置。有趣的是,如果你查看 Vim 的运行时文件,它相当于设置let g:is_kornshell = 1.
可以在https://askubuntu.com/a/976504上找到有关 Bourne shell 如何成为 bourne、bourne 再次作为Ubuntu 上bash的替代品/bin/sh,并最终被取代的有趣历史。 dash