何がしたかったか
VSCodeの「Markdown Preview Enhanced」は素晴らしい拡張機能です。
最近これを使って色々とドキュメントをPlantUML付きで書いているのですが、
PlantUML付きのMarkdownをレンダリングしてくれる環境が無い人達の為には、PDFやHTMLに変換して配布する必要があります。
差別にうるさい令和の時代に、エディタを強制するのはマッチしません。
一方で、素晴らしき「Markdown Preview Enhanced」には、何故かPDFやHTMLでの出力を実行するコマンドはありません。
(Preview表示画面でのクリック操作では可能ですが)
以下の文をMarkdown内に記載しておけば、HTMLでのPreview時には自動でファイルとしても保存されますが、
ちょっとした変更の場合はPreviewを表示しない場合もあると思います。
---
export_on_save:
html: true
---
そこで、やや強引ですが、Workspaceの全指定拡張子のファイルを開いて任意のコマンド(複数個)を実行する拡張機能を作成しました。
VSCodeのコマンドをマクロのように任意に組み立てることができます。
これで、自動でWorkspace内の全mdファイルをMarkdown Preview EnhancedでPreviewして、最新のHTMLファイルを取得できます。
ちなみに、呼び出すコマンドは引数指定ができません。。。
拡張機能
Linkからインストールできます。
設定は以下の2項目です。
Setting | Default | Note |
---|---|---|
"allfileopen.extensionFileSearch" |
"txt" |
対象ファイルの拡張子 |
"allfileopen.runcommands" |
[""] |
実行するVSCodeのコマンド |
開いたファイルは自動では閉じないので、ファイル数が多い場合には操作後にファイルを閉じるのが無難です。
ちなみに、Markdown Preview Enhancedでの自動HTML変換の為にはPreviewを開いた後にファイルを保存する必要があります。
と、言うわけで主目的を達成するためのJSONファイルの設定は以下です。
ファイルを開いた後に、
"markdown-preview-enhanced.openPreviewToTheSide"
サイドViewに表示した上で、
"workbench.action.files.save"
ファイルを保存してHTMLファイルを出力して
"workbench.action.revertAndCloseActiveEditor"
ファイルを閉じます
"settings": {
"allfileopen.extentionFileSearch" : "md",
"allfileopen.runcommands" : ["markdown-preview-enhanced.openPreviewToTheSide",
"workbench.action.files.save",
"workbench.action.revertAndCloseActiveEditor"],
},
なお、使用したいコマンドの名称は、VSCode上で以下の手順により確認できます。
-
Preferences: Open Keyboard Shortcuts
(デフォルトショートカットはCtrl+K Ctrl+S
です) - 使用したいコマンドを右クリックして、
Copy Command
をクリック - 貼り付け
設定したいコマンドは、専用のJSONファイルで引数も含めて指定できたほうがいいかもしれません。
VSCode自体を開いて、本拡張機能のコマンドを実行するのはRPAツールが必要ですが、
VSCode拡張機能で実現しているWorkflowがある場合には有効かな、と考えています。
余談
自分は普段(foreach文があるモダンな言語としては)C#を使うのですが、TypeScript(JavaScript)のforeachではasync/awaitが使えないことを知らずにハマりました。
かなり近い構文/文法の為、方言くらいの違いと思っていたら痛い目にあいました。
今回は、1ファイルずつ処理をしたかった(ファイルオープン->コマンド実行)ので、for-of文に変更しました。
参考