こんにちは、Habr! この記事は、5人のテキストエディター用に作成したRainbow CSVプラグインに関するものです。
VS Code 、 Vim 、 Sublime Text 3 、 Atom 、 Gedit
この記事の多くの読者は、CSV(カンマ区切り)、TSV(タブ区切り)、および同様のファイルに定期的に遭遇すると思います。 テキストエディターでそれらを開こうとすると(そして、他にどのように中身を見つけるのか?)、完全に見た目が美しい画像が画像の左側のように開きます。 それを見ると、テーブルにある列の数を言うのは難しいです。 画像の右側には、RainbowCSVをオンにした同じファイルがありますが、構文の強調表示により読みやすさが大幅に向上しています。
奇妙なことに、このようなハイライトの構文は、1つ(長いですが)の正規表現行を使用して設定されます。
((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?
強調表示ルールは、たとえばここ (VS Codeのバージョン)で完全に見つけることができますが、正規表現自体は別として、見るべきものはまったくありません。
比較すると、構文ファイルは、Python、JS、C ++などの汎用言語向けです。 通常、非常に難解なコードを数百行使用します。
記事を詳細に読み込まないために、記事の基本部分と、この正規表現がどのように機能するかを推測することが読者に提供されます。
ヒント:簡単な式([^,]*,)?([^,]*,)?
-CSVファイルを2つの異なる交互の色で強調表示しますが、引用符でエスケープされたフィールド内のコンマでは正しく機能しません。
ちなみに、以降、Visual Studio CodeのRainbow CSVバージョンは、 これは、現在最も技術的に高度で人気のあるプラグインのバージョンです(50万ダウンロード以上)。
そのため、Rainbow CSVは列を強調表示するという事実に加えて、次のこともできます。
- カーソルが現在どの列を指しているかを示します。最初のタイトル行の列番号+名前。 ファイルの先頭にヘッダー行がない場合(データはすぐに送信されます)、ユーザーは「仮想」ヘッダーを設定できます。
- 1行あたりのエントリ数が異なるか、エスケープ文字の誤った使用がないか、ファイルを自動的に確認します-「CSV Lint」。
- 組み込みのRBQLインタープリターを使用して、SQLに似たクエリを実行します。これにより、非常に幅広いクラスのテキスト変換を入力テーブルに適用できます。
RBQLは、ほぼすべてのSQLステートメント(SELECT、UPDATE、WHERE、ORDER BY、TOP / LIMIT、JOIN、GROUP BY)と、JavaScriptおよびPythonのすべての標準関数およびステートメントをサポートしています。
RBQLは別のテクノロジーですが、Rainbow CSVの概念に非常によく適合するため、この統合には多くの利点があります。
Rainbow CSVプラグインの最も重要な機能の1つは、コンテンツによるCSVファイルの自動検出です。 この機能は不可欠です 多くの場合、CSV(またはTSV)ファイルには、.csv(.tsv)以外のファイル拡張子が付いています。 また、拡張子が.csvで、セミコロンが実際にセパレータとして使用されているファイルを見つけることもできます;
。 内容ごとにテーブルファイルを決定するアルゴリズムは非常に単純です。このセパレータのsplit'eが一定である場合、各行のセルの数が1を超えないことを確認してください。
Rainbow CSVとグラフィカルな配置の比較
一般に、CSVデータを表示する従来の方法は、Excelなどのグラフィックエディターにインポートすることです。
この方法と比較して、Rainbow CSVには長所と短所の両方があります。
利点:
- あなたが見るものはあなたが得るものです-あなたは画面上に見えるものがファイルの実際の内容であることを確信することができます。
- お気に入りのテキストエディターの使い慣れた環境
- ゼロコストの抽象化:構文の強調表示は、グラフィカルな配置と比較して、計算の観点から非常に「安価」です。
- 情報密度の向上:より多くのデータが1つの画面に収まります-グラフィックの配置は、配置スペースのために多くのスペースを「使い果たします」。
- 異なるウィンドウから1つの列(同じ色で強調表示)を視覚的にリンクする機能
短所:
- 標準実装では10種類の色が使用されるため、列の数が10を超えると、色が繰り返され始め、列の色分け効率が低下します。
- 二重引用符で保護されたセルの行の折り返しはサポートされていません。 ここで 、この問題の詳細を読むことができます。 ただし、セル内で改行を含むCSVは非常に非実用的な形式であると考えています。
テキストの配置との比較
CSVファイルの読みやすさを向上させる別の方法は、ファイルをスペースに揃えることですが、この方法ではファイルの内容が変更されるため、その適用性は非常に制限されます。
また、私の意見では、Rainbowの構文の強調表示後のファイルの読みやすさは、スペースで揃えられたファイルの読みやすさよりも優れています。
プロジェクトについて少し
Rainbow CSVの最初のバージョンは、 rainbow_parenthesesプラグインに基づいて5年前にVimのために書かれました。ご覧のように、このプロジェクトからコードの一部だけでなく、名前の半分も借りました=)
VSCode、Atom、Sublime Text 3のバージョンは1年前に登場しました。
多くの重要な機能と改善がプラグインのユーザーによって提案されています。
さまざまなエディターのプラグイン開発プロセスの比較
結論として、一般的なテキストエディターのAPIを少し比較することができます。
VSCode、Atom、Sublime Text 3のプラグインのAPIは非常に似ていますが、主な違いは、VS CodeとAtomの拡張機能がJavaScriptで、Sublime Text 3がPythonで記述されていることです。
3つのエディターはすべて、構文の強調表示に同じ正規表現エンジンを使用しているため、これらのエディター間でRainbow CSVを移動するには、レギュラーの最小限の適応のみが必要でした。
一般的に、最も快適で便利なプラグイン開発プロセスはVS Codeによって提供されると言えます。 一方で、Rainbow CSVの完全な操作に必要な機能の一部が最初は欠けていたのは何らかの理由でしたが、VS Codeチームは喜んで私のPRを受け入れて改善し、必要な方法を追加しました。
Vim用のプラグインの作成は、これらの3つの新しいエディターとは大きく異なります。 Vimは、独自のVimScript言語と、開いているファイルの内容を操作するためのさまざまなコマンドを使用します。 Vimが強調表示に使用する構文モデルも、VSCode、Atom、Sublimeが提供するものとはまったく異なります。