3

バックグラウンド

私は多くのWindowsシステム管理のニーズにJScript(MicrosoftのECMAScript実装)を使用しています。これは、ActiveX(自動COM)オブジェクトをたくさん使用していることを意味します。これらのオブジェクトのメソッドは、多くの場合、数値またはブール引数を想定しています。例えば:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

(MSDNのCreateTextFileメソッド)

2行目では、2番目の引数が私が話しているものであることがわかります。「true」のブール値は、メソッドの動作がどのように変化するかを実際には説明していません。これは私にとっては問題ではありませんが、自動化に恥ずかしがり屋の同僚は簡単に不気味になります。議論が何をしているのかわからないことは彼らを驚かせます。残念ながら、定数の長いリスト(もちろん、現在のJScriptバージョンはそれらをサポートしていないため、実際の定数ではありません)もそれらを驚かせます。そこで、これらの基本的な関数呼び出しのいくつかをインラインブロックコメントで文書化することにしました。上記の例の2行目は、次のように記述されます。

var a = fso.CreateTextFile("c:\\testfile.txt", /*overwrite*/ true, /*unicode*/ false);

しかし、それは私にとってジレンマを強調する小さな構文で終わります。コメントが活気に満ちているのが好きです。ブロックコメントと行コメントの両方。ただし、これらの小さなインラインブロックコメントは、個人的にはほとんど意味がありません。これらの特定のコメントをより控えめな方法で強調したいと思います(たとえば、白地にライトグレー)。それは私のジレンマに私をもたらします。

ジレンマ

開始マークと終了マークの両方が同じ行にある場合、ブロックコメントのデフォルトの構文強調表示をオーバーライドしたいと思います。理想的には、これは私のvimrcファイルでのみ行われ、javascript.vim構文の個人用コピーではありません。私の最初の試みは哀れです:

hi inlineComment    guifg=#bbbbbb
match inlineComment "\/\*.*\*\/"

この正規表現パターンの最初の問題は、貪欲な検索であることがすぐにわかります。行の最初の「/*」から最後の「*/」まで一致します。つまり、2つのインラインブロックコメントの間のすべてがこのハイライトスタイルにもなります。私はそれを修正することができますが、私の2番目の懸念にどう対処するかは本当にわかりません。

ECMAScriptの文字列リテラル内でコメントを定義することはできません。したがって、この構文の強調表示は、文字列の強調表示もオーバーライドします。システム管理スクリプトでこれに問題が発生したことは一度もありませんが、ブラウザ用の多くのjavascriptライブラリ(less.jsなど)のソースを調べていると、しばしば問題になります。

素晴らしいStackOverflowコミュニティがvimrczenを復元するために推奨する正規表現パターン、構文定義、またはその他のソリューションは何ですか?

4

2 に答える 2

3

よくわかりませんが、あなたの説明からすると、新しい構文定義は必要ないようです。Vim構文ファイルでは通常、特定の構文項目を独自の強調表示で上書きできます。この場合、必要なアイテムはと呼ばれるjavaScriptCommentので、このようなコマンドはその強調表示を設定します:-

hi javaScriptComment guifg=#bbbbbb

ただし、これは.vimrcファイル(またはそこから供給される場所)で行う必要があるため、構文ファイルの前に評価されます。構文ファイルはhighlight defaultコマンドを使用するため、構文ファイルでの強調表示の選択は、強調表示が設定されていない構文項目にのみ影響します。詳細について:help :hi-defaultは、を参照してください。ところで、それはVim5.8以降でのみ動作します。

上記のコマンドは、すべてのインライン/* */コメントを変更し//、行コメントは異なる構文項目(javaScriptLineComment)であるため、デフォルト設定のままにします。javascript.vimファイルを見ると、これらすべてのグループの名前を見つけることができます。(これを行う最も簡単な方法はです:e $VIMRUNTIME/syntax/javascript.vim。)

一部のインラインコメントのみを変更したい場合は、もう少し複雑ですが、javascript.vimを参照することで何をすべきかを簡単に確認できます。これを行うと、ブロックコメントが次のように定義されていることがわかります。-

syn region javaScriptComment start="/\*" end="\*/" contains=@Spell,javaScriptCommentTodo

開始マーカーと終了マーカーに別々の正規表現を使用できることを確認してください。貪欲でない数量詞などとの間にあるものを一致させることを心配する必要はありません。同様に機能するが1行のみで機能する構文項目を作成するには、onelineオプションを追加してみてください(:h :syn-oneline詳細については):-

syn region myOnelineComment start="/\*" end="\*/" oneline

2つのグループを削除したのは、contains(1)パラメーター名にのみ使用している場合は、これらのコメント内でスペルチェックをオンにしたくない可能性があり、(2)でonelineオーバーライドonelineされないセクションが含まれているためです。コンテナ領域であるため、すべてのTODOコメントをこの領域と一致させることができます。

この新しい種類のコメント領域を.vimrcで定義し、ハイライトを好きなように設定できます。これは、すでにその方法を知っているように見えるので、これ以上詳しくは説明しません。私はこの特定の例を試したことがないので、それを機能させるにはまだ少し手を加える必要があるかもしれません。試してみて、どうなるか教えてください。

于 2012-06-28T00:59:26.157 に答える
2

通話の上にコメント行を追加してみませんか?

私はそれを思います

// fso.CreateTextFile(filename:String, overwrite:Boolean, unicode:Boolean)
var a = fso.CreateTextFile("c:\\testfile.txt", true, false);

よりもはるかに読みやすく、有益です

var a = fso.CreateTextFile("c:\\testfile.txt", /*overwrite*/ true, /*unicode*/ false);
于 2012-06-28T05:54:21.063 に答える