Как запустить активацию расширения vscode markdown

#visual-studio-code #vscode-extensions

#visual-studio-code #vscode-расширения

Вопрос:

В моем расширении VS Code у меня есть некоторый код, который использует встроенное расширение Markdown. Я фиксирую ссылку на него, регистрируясь в качестве плагина markdown и помещая следующий код в конец метода активации моего расширения.

   return {
    extendMarkdownIt(mdparam: any) {
      return md = mdparam;
    }
  };
 

Markdown вызывает это, когда оно активируется.

Как правило, это не проблема. Большинство вариантов использования моего расширения связаны с файлом markdown, уже загруженным в активный редактор, и загрузка этого файла запускает активацию расширения markdown.

Однако есть некоторые допустимые варианты использования, в которых это не так.

Мне нужно программно запустить активацию расширения markdown. В некоторых из этих случаев в активном редакторе открывается файл другого типа, поэтому загрузка в него файла markdown является неприемлемым вариантом.

Некоторые потенциальные стратегии:

  1. Измените языковой режим. Есть команда workbench.action.editor.changeLanguageMode , но нет документации. Я пытался
 vscode.commands.executeCommand('workbench.action.editor.changeLanguageMode', 'md');
 

но это запускает пользовательский интерфейс
введите описание изображения здесь
поэтому я попробовал использовать шаблон, который я видел в параметрах других команд, и добавил , true . Это подавило пользовательский интерфейс, но, похоже, не работает.

  1. Загрузите файл markdown в новый редактор и снова закройте его. Это должно сработать, но это некрасиво.
  2. Поместите что-нибудь в раздел вкладов моего расширения, которое изменяет триггер активации для расширения markdown, чтобы он запускался другими типами файлов, с которыми работает мое расширение.

Из этих вариантов моим любимым было бы 3, но я даже не знаю, возможно ли это вообще. Варианту 1 мешает дрянная (во многих случаях несуществующая) документация для внутренних команд vscode.

Комментарии:

1. что вам нужно от расширения Markdown в файле json?

2. @rioV8 метод визуализации.

3. как вы можете отобразить markdown, если у вас нет файла Markdown ни в одном из редакторов

4. Я не загружаю «уценку», я загружаю несколько файлов markdown, перечисленных в json. Это то, что говорится в первой строке вопроса. Несколько документов в соответствии с метаданными в файле json. Документы являются markdown. Какая часть этого неоднозначна?

5. визуализация Markdown — это веб-просмотр (представление!) Содержимого текстового документа в редакторе, так как же вы хотите визуализировать markdown без редактора. Вы создаете документ без названия со строковым содержимым документа и устанавливаете LanguageID на markdown ?

Ответ №1:

Вариант 1 это. Если кто-нибудь знает, как выполнить вариант 3, пожалуйста, скажите, приведенное ниже решение является ужасным взломом.

Можно запустить активацию расширения Markdown, изменив язык документа любого открытого редактора на markdown. В случае отсутствия открытых редакторов документ с языковым набором markdown может быть создан в памяти и загружен в редактор.

Если VS Code занят загрузкой расширений, активация может занять несколько сотен миллисекунд, поэтому лучше всего следить за переменной, в которую записывается markdown-it.

Переменная md является глобальной (глобальной для моего расширения, а не для всего VS Code), на которую приобретается ссылка, как показано в вопросе.

   let ed = vscode.window.activeTextEditor;
  if (ed) {
    let lid = ed.document.languageId;
    if (lid !== "markdown") {
      vscode.languages.setTextDocumentLanguage(ed.document, "markdown").then(
        function waitForMd() {
          if (md) {
            vscode.languages.setTextDocumentLanguage(ed!.document, lid);
          } else {
            setTimeout(waitForMd, 100);
          }
        }
      );
    }
  } else {
    vscode.workspace.openTextDocument({ language: "markdown" }).then(doc => {
      vscode.window.showTextDocument(doc).then(
        function waitForMd() {
          if (md) {
            vscode.commands.executeCommand("workbench.action.closeActiveEditor");
          } else {
            setTimeout(waitForMd, 100);
          }
        });
    });
  }
 

Как только захват будет завершен, мы сможем восстановить истинный язык или закрыть редактор, если это необходимо. Чтобы быть реалистом, второй случай (без активного редактора) маловероятен, потому что мое собственное расширение не активируется, пока вы что-то не загрузите. Во всяком случае, сейчас он работает стабильно. Более крупный проект продвигается хорошо.

Комментарии:

1. что такое md (выглядит markdown вкратце)?