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 構文の強調表示は、Syntax ファイルを介して行われます。VIM に入り、 と入力し:echo $VIMRUNTIMEます。VIMRUNTIMEこれにより、ディレクトリがわかります。そのディレクトリには、 というディレクトリがありsyntaxます。その中には構文定義があります。sh.vimBASH、Kornshell、および Bourne シェルの定義を含むというファイルがあります。

ファイルの 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 行目のさらに下に 1 つある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 に答える