2

我的 vi 在突出显示我的 bash 脚本中的错误方面非常出色。但是,我注意到的一件事是,当我将 bash 扩展名用于所有大写或所有小写时,vi 会将字符突出显示为错误。有解决方案吗?

#!/bin/bash
mystr="Abc"
echo ${mystr,,} # Works, but vi highlights ,, as in error

% ./test.sh
abc
%
4

1 回答 1

2

VIM 语法高亮是通过语法文件完成的。进入 VIM 并输入:echo $VIMRUNTIME. 这将告诉您VIMRUNTIME目录。在该目录中,有一个名为syntax. 里面是语法定义。有一个名为的文件sh.vim,其中包含 BASH、Kornshell 和 Bourne shell 的定义。

看看文件的第 400 行,你会看到如下内容:

" Special ${parameter OPERATOR word} handling: {{{1
" sh ksh bash : ${parameter:-word}    word is default value
" sh ksh bash : ${parameter:=word}    assign word as default value
" sh ksh bash : ${parameter:?word}    display word if parameter is null
" sh ksh bash : ${parameter:+word}    use word if parameter is not null, otherwise nothing
"    ksh bash : ${parameter#pattern}  remove small left  pattern
"    ksh bash : ${parameter##pattern} remove large left  pattern
"    ksh bash : ${parameter%pattern}  remove small right pattern
"    ksh bash : ${parameter%%pattern} remove large right pattern

部分中定义了模式以及它们是否合法。您需要定义一个如下所示的区域:

if exists("b:is_bash")
   Here be dragons
endif

实际上,我在最新版本的文件中的第 423 行看到了更远的sh.vim内容,因此您不必定义自己的。

现在,您所要做的就是将该Here be dragons部分替换为定义您想要显示为非错误的语法的内容。我对 VIM 语法了解得不够多,无法告诉你。然而,它看起来并不那么复杂。备份旧的sh.vim并获得一些乐趣。信不信由你,这一切都记录在 VIM 中。我已经修改了 Perl 和 Python 的语法文件,没有太多问题。

你也可以去https://vim.svn.sourceforge.net/svnroot/vim/vim7/runtime/syntax/看看是否有一个新sh.vim文件可能包含你需要的语法修复。

您也可以将问题报告给VIM 项目并让他们知道该问题。他们非常擅长修复此类问题,然后您可以在上面的 Subversion URL 上下载最新的修复程序。

于 2012-05-29T23:09:50.077 回答