目次
アイデア分析
コードの実装
概要
ホームページ 開発ツール VSCode vscode でのマークダウン プレビューの実装原理を深く理解する

vscode でのマークダウン プレビューの実装原理を深く理解する

Sep 01, 2021 pm 06:13 PM
vscode

vscode でのマークダウン プレビューの実装原理を深く理解する

vscode のマークダウン プレビューは、私たちが一日中使用する機能ですが、それがどのように実装されているか考えたことはありますか?おそらくいつか、カスタマイズされたマークダウン プレビューのリクエストを受け取ることになるでしょう。 [推奨学習: "vscode チュートリアル "]

実際、全体的なアイデアは比較的単純です。Web ビュー パネルを作成し、コンテンツをマークダウンによって生成された HTML に設定し、その後、マークダウンが更新されるときに同時に Web ビューを変更します。html で実行します。

アイデア分析

vscode.window.createWebviewPanel を通じて Web ビューを作成し、横に開くように指定して、パネル オブジェクトの webview.html 属性を通じて HTML を設定します。

html は、エディターのマークダウン コンテンツを通じて生成されます。エディターのコンテンツは editor.document.getText() を通じて取得され、サードパーティのマークダウンから HTML への変換ライブラリが呼び出されて生成されます。

これでマークダウンのプレビューが完了しました。

プレビューを更新する必要がある場合は、vscode.workspace.onDidSaveTextDocument および vscode.workspace.onDidChangeTextDocument のイベントをリッスンします。ドキュメントが更新されて保存されたら、エディターのコンテンツを取得し、HTML を再生成します。そしてそれをWebViewに設定します。

WebviewPanel は、メッセージを渡すために webview.postMessage(message); をサポートし、メッセージを渡すことによってトリガーできる updateHTML などの一連のコマンドをサポートします。

しかし、どのドキュメントがどの Web ビューを更新するかをどうやって知るのでしょうか?

webviewPanel の作成時にマップを維持し、マップに記録できます。更新時に対応する Webview を見つけて更新できるように、キーはファイル パスです。

これでマークダウン内容の更新が完了します。

実際、全体的なアイデアは比較的単純です。コードを書き留めてみましょう。

コードの実装

vscode-markdown-preview のコードを見てみましょう-enhanced plug-in. これもマークダウンをプレビューするためのプラグインです. コードは非常にシンプルなので、学習に使用できます。

(次のコードは簡略化されたコードです)

まず、プラグインはトリガー条件を指定する必要があります。つまり、package.json で activityEvents を指定する必要があります:

"activationEvents": [
    "onLanguage:markdown",
    "onCommand:markdown-preview-enhanced.openPreviewToTheSide"
],
ログイン後にコピー

Here is マークダウンコンテンツの編集時にアクティブになるものと、コマンドの実行時にアクティブになるものがあります。

特定のアクティブ化ロジックは active メソッド内にあります:

export function activate(context: vscode.ExtensionContext) {

  const contentProvider = new MarkdownPreviewEnhancedView(context);

  context.subscriptions.push(
    vscode.commands.registerCommand(
      "markdown-preview-enhanced.openPreviewToTheSide",
      openPreviewToTheSide,
    ),
  );
  
  function openPreviewToTheSide(uri?: vscode.Uri) {
    let resource = uri;
    if (!(resource instanceof vscode.Uri)) {
      if (vscode.window.activeTextEditor) {
        resource = vscode.window.activeTextEditor.document.uri;
      }
    }
    contentProvider.initPreview(resource, vscode.window.activeTextEditor, {
      viewColumn: vscode.ViewColumn.Two,
      preserveFocus: true,
    });
  }
}
ログイン後にコピー

コマンドを登録しました。コマンドを実行すると、現在のエディターの URL が取得され、マークダウンがプレビューされます。

プレビューのロジックはすべて MarkdownPreviewEnhancedView のインスタンス オブジェクトで一元的に定義されており、コマンドがトリガーされると initPreivew が実行されます。

public async initPreview(
    sourceUri: vscode.Uri,
    editor: vscode.TextEditor,
    viewOptions: { viewColumn: vscode.ViewColumn; preserveFocus?: boolean },
) {
    // 创建 webview
    let previewPanel: vscode.WebviewPanel = vscode.window.createWebviewPanel(
        "markdown-preview-enhanced",
        `Preview ${path.basename(sourceUri.fsPath)}`,
        viewOptions
    );

    // 监听 webview 的消息
    previewPanel.webview.onDidReceiveMessage((message) => {});

    // 记录 webview 到 map 中
    this.previewMaps[sourceUri.fsPath] = previewPanel;
    
    // 拿到编辑器的文本,生成 html
    const text = editor.document.getText();
    engine
      .generateHTMLTemplateForPreview({inputString: text})
      .then((html) => {
        // 设置 html 到 previewPanel
        previewPanel.webview.html = html;
      });
}
ログイン後にコピー

initWebivew で webviewPanel を作成し、webviewPanel をマップに保存します。キーはドキュメントのファイル パスです。 HTML を生成するためのエディター テキストを取得し、それを webview.html に設定すると、マークダウン プレビューが完了します。

このパスを通過すると、マークダウンのプレビューが実現します。

しかし、一度プレビューするだけでは十分ではありません。ドキュメントを更新した後、自動的に更新する必要があります。アクティブなメソッドにイベント監視を追加し続けます:

  context.subscriptions.push(
    vscode.workspace.onDidSaveTextDocument((document) => {
      if (isMarkdownFile(document)) {
        contentProvider.updateMarkdown(document.uri, true);
      }
    }),
  );

  context.subscriptions.push(
    vscode.workspace.onDidChangeTextDocument((event) => {
      if (isMarkdownFile(event.document)) {
        contentProvider.update(event.document.uri);
      }
    }),
  );
ログイン後にコピー

テキストの変更と保存を監視するとき、 update メソッドを呼び出して更新します。

public updateMarkdown(sourceUri: Uri) {

    // 从 map 中根据文件路径取出对应的 webviewPanel
    const previewPanel = this.previewMaps[sourceUri.fsPath];
    
    // 生成最新的 html 传递给 webview
    const text = document.getText();
    engine
        .parseMD(text)
        .then(({ markdown, html }) => {
            previewPanel.webview.postMessage({
              command: "updateHTML",
              html
            });
        }

}
ログイン後にコピー

ここでは、webview.postMessage を通じて updateHTML コマンド メッセージを HTML コンテンツに渡し、HTML コンテンツの更新をトリガーします。

このようにして、マークダウンの同期更新を実現します。

概要

vscode のマークダウンのプレビューは一般的に使用されていますが、実装は難しくありません。vscode-markdown-preview-enhanced プラグインのソース コードを調べて明確にしました。全体的なプロセス:

  • vscode.window.createWebviewPanel を介して webviewPanel を作成し、html
  • html を表示します。 editor.document.getText() を介してテキスト コンテンツを取得した後、それを生成します。サードパーティのパッケージを取得し、それを webviewPanel に設定します
  • workspace.onDidSaveTextDocument と workspace.onDidChangeTextDocument をリッスンして最新のコンテンツを取得し、HTML を生成し、webview.postMessage を通じて udpateHTML メッセージを渡すことによって Webview に更新します。
  • テキストの内容が変更され、対応する webview が更新されるように、uri.fsPath と webviewPanel の間の対応する関係を保存するにはマップを記録する必要があることに注意してください。マークダウンのプレビューは一般的ですが、難しい要件ではなく、エントリーレベルの vscode プラグイン開発に適しています。この記事があなたのアイデアを明確にするのに役立つことを願っています。
プログラミング関連の知識について詳しくは、

プログラミング入門

をご覧ください。 !

以上がvscode でのマークダウン プレビューの実装原理を深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vscodeのヘッダーファイルを定義する方法 vscodeのヘッダーファイルを定義する方法 Apr 15, 2025 pm 09:09 PM

ビジュアルスタジオコードを使用してヘッダーファイルを定義する方法は?ヘッダーファイルを作成し、.hまたは.hpp接尾辞名(クラス、関数、変数など)を使用してヘッダーファイルにシンボルを宣言し、#includeディレクティブを使用してプログラムをコンパイルして、ソースファイルにヘッダーファイルを含めます。ヘッダーファイルが含まれ、宣言された記号が利用可能になります。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

vscode中国の注釈が疑問符になるという問題を解決する方法 vscode中国の注釈が疑問符になるという問題を解決する方法 Apr 15, 2025 pm 11:36 PM

Visual Studioコードで中国のコメントが疑問符になるという問題を解決する方法:ファイルのエンコーディングを確認し、「BOMなしでUTF-8」であることを確認します。フォントを「歌のスタイル」や「Microsoft Yahei」などの漢字をサポートするフォントに変更します。フォントを再インストールします。 Unicodeサポートを有効にします。 VSCODEをアップグレードし、コンピューターを再起動し、ソースファイルを再作成します。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

VSCODE端子の共通コマンド VSCODE端子の共通コマンド Apr 15, 2025 pm 10:06 PM

VSコード端子の一般的なコマンドには、端子画面のクリア(クリア)、現在のディレクトリファイル(LS)のリスト、現在のワーキングディレクトリ(CD)、現在のワーキングディレクトリパス(PWD)の印刷、新しいディレクトリ(MKDIR)の作成、空のディレクトリ(RMDIR)の削除、新しいファイルの作成(RM)の削除(RM)、COPのコピー(RM)、 (MV)ファイルコンテンツの表示(CAT)ファイルコンテンツを表示してスクロール(より少ない)ファイルコンテンツを表示するだけです(その他)ファイルの最初の数行(ヘッド)を表示する

vscode端子使用チュートリアル vscode端子使用チュートリアル Apr 15, 2025 pm 10:09 PM

VSCODEビルトインターミナルは、エディター内でコマンドとスクリプトを実行して開発プロセスを簡素化できるようにする開発ツールです。 VSCODE端子の使用方法:ショートカットキー(CTRL/CMD)で端子を開きます。コマンドを入力するか、スクリプトを実行します。 Hotkeys(Ctrl Lなどの端子をクリアするなど)を使用します。作業ディレクトリ(CDコマンドなど)を変更します。高度な機能には、デバッグモード、自動コードスニペット完了、およびインタラクティブコマンド履歴が含まれます。

vscodeで中国モードを切り替える方法 vscodeで中国モードを切り替える方法 Apr 15, 2025 pm 11:39 PM

vs中国モードを切り替えるコード:設定インターフェイスを開き(Windows/Linux:Ctrl、MacOS:CMD、)[エディター:言語]設定を検索します。ドロップダウンメニューで[中国語]を選択します。

中国語でVSCodeを設定する方法 中国語でVSCodeを設定する方法 Apr 15, 2025 pm 09:27 PM

ビジュアルスタジオコードで中国語を設定するには2つの方法があります。1。中国語パッケージをインストールします。 2。構成ファイルの「ロケール」設定を変更します。 Visual Studioコードバージョンが1.17以上であることを確認してください。

See all articles