🐈
VSCodeにおけるMarkdown上の画像をhtml形式に変更するショートカットの作成方法
概要
VSCodeでMarkdownを作成する際に、クリップボード等の画像を貼り付けると下記のように表示されてしまい、画像サイズの指定ができない。そのため2つ目のような感じに置換するショートカットの登録方法を解説します。

<img src="***.jpg" width="300">
結論
VSCodeを開き、ctrl+shift+pでコマンドパレットを開き、「キーボードショートカットを開く(JSON)」を開く。
次の内容を追記すると、ctrl+shift+rで置換可能な状態となる。
[
// markdownの画像をhtml形式に変換するショートカット
{
"key": "ctrl+shift+r",
"command": "editor.actions.findWithArgs",
"when": "editorTextFocus",
"args": {
"searchString": "!\\[画像\\.jpg\\]\\((.*?\\.jpg)\\)",
"replaceString": "<img src=\"$1\" width=\"300\">",
"isRegex": true
}
}
]
補足
ショートカットを使えるタイミングを調整したい場合には、when引数を変更してください。参考サイトの説明はこちら。日本語化したものは、付録をご参照ください。
参考サイト
付録
ChatGPTでAvailable context keysを日本語に変換した表
コンテキスト名 | 条件が真となる場合 |
---|---|
エディタ関連のコンテキスト | |
editorFocus | エディタがフォーカスされている場合(テキストまたはウィジェット)。 |
editorTextFocus | エディタ内のテキストがフォーカスされている場合(カーソルが点滅している)。 |
textInputFocus | 任意のエディタがフォーカスされている場合(通常のエディタ、デバッグREPLなど)。 |
inputFocus | 任意のテキスト入力エリアがフォーカスされている場合(エディタやテキストボックス)。 |
editorTabMovesFocus | Tabキーでエディタ外にフォーカスを移動できる場合。 |
editorHasSelection | エディタ内でテキストが選択されている場合。 |
editorHasMultipleSelections | 複数のテキスト領域が選択されている場合(複数カーソル)。 |
editorReadonly | エディタが読み取り専用の場合。 |
editorLangId | エディタに関連付けられた言語IDが一致する場合。例: "editorLangId == typescript"。 |
isInDiffEditor | アクティブなエディタが差分エディタの場合。 |
isInEmbeddedEditor | 埋め込みエディタ内でフォーカスされている場合。 |
OS関連のコンテキスト | |
isLinux | OSがLinuxの場合。 |
isMac | OSがmacOSの場合。 |
isWindows | OSがWindowsの場合。 |
isWeb | Webからエディタにアクセスしている場合。 |
リスト関連のコンテキスト | |
listFocus | リストがフォーカスされている場合。 |
listSupportsMultiselect | リストが複数選択をサポートしている場合。 |
listHasSelectionOrFocus | リストに選択またはフォーカスがある場合。 |
listDoubleSelection | リストに2つの要素が選択されている場合。 |
listMultiSelection | リストに複数の要素が選択されている場合。 |
モード関連のコンテキスト | |
inSnippetMode | エディタがスニペットモードになっている場合。 |
inQuickOpen | Quick Open ドロップダウンがフォーカスされている場合。 |
リソース関連のコンテキスト | |
resourceScheme | リソースの Uri スキームが一致する場合。(例: "resourceScheme == file") |
resourceFilename | エクスプローラーまたはエディタのファイル名が一致する場合。(例: "resourceFilename == gulpfile.js") |
resourceExtname | エクスプローラーまたはエディタのファイル名拡張子が一致する場合。(例: "resourceExtname == .js") |
resourceDirname | エクスプローラーまたはエディタのリソースの絶対フォルダパスが一致する場合。(例: "resourceDirname == /users/alice/project/src") |
resourcePath | エクスプローラーまたはエディタのリソースの絶対パスが一致する場合。(例: "resourcePath == /users/alice/project/gulpfile.js") |
resourceLangId | エクスプローラーまたはエディタのタイトルの言語IDが一致する場合。(例: "resourceLangId == markdown") |
isFileSystemResource | エクスプローラーまたはエディタのファイルが、ファイルシステムプロバイダーで扱えるファイルシステムリソースである場合。 |
resourceSet | エクスプローラーまたはエディタのファイルが設定されている場合。 |
resource | エクスプローラーまたはエディタのファイルの完全な Uri。 |
エクスプローラー関連のコンテキスト | |
explorerViewletVisible | エクスプローラービューが表示されている場合。 |
explorerViewletFocus | エクスプローラービューがキーボードフォーカスされている場合。 |
filesExplorerFocus | ファイルエクスプローラーセクションがキーボードフォーカスされている場合。 |
openEditorsFocus | 「OPEN EDITORS」セクションがキーボードフォーカスされている場合。 |
explorerResourceIsFolder | エクスプローラーでフォルダが選択されている場合。 |
エディタウィジェット関連のコンテキスト | |
findWidgetVisible | エディタの検索ウィジェットが表示されている場合。 |
suggestWidgetVisible | サジェストウィジェット(インテリセンス)が表示されている場合。 |
suggestWidgetMultipleSuggestions | 複数のサジェスト(提案)が表示されている場合。 |
renameInputVisible | 名前変更用の入力テキストボックスが表示されている場合。 |
referenceSearchVisible | 「Peek References」ウィンドウが開いている場合。 |
inReferenceSearchEditor | 「Peek References」ウィンドウ内のエディタがフォーカスされている場合。 |
config.editor.stablePeek | ピークエディタを開いた状態に保つ設定(editor.stablePeek)が有効な場合。 |
codeActionMenuVisible | コードアクションメニューが表示されている場合。 |
parameterHintsVisible | パラメータヒントが表示されている場合(editor.parameterHints.enabled設定によって制御)。 |
parameterHintsMultipleSignatures | 複数のパラメータヒントが表示されている場合。 |
デバッガー関連のコンテキスト | |
debuggersAvailable | 適切なデバッガー拡張機能が利用可能な場合。 |
inDebugMode | デバッグセッションが実行中の場合。 |
debugState | アクティブなデバッガーの状態の場合。可能な値は inactive, initializing, stopped, running。 |
debugType | デバッグタイプが一致する場合。(例: "debugType == 'node'") |
inDebugRepl | デバッグコンソール REPL にフォーカスがある場合。 |
統合ターミナル関連のコンテキスト | |
terminalFocus | 統合ターミナルにフォーカスがある場合。 |
terminalIsOpen | 統合ターミナルが開かれている場合。 |
タイムラインビュー関連のコンテキスト | |
timelineFollowActiveEditor | タイムラインビューがアクティブなエディタを追従している場合。 |
タイムラインビュー項目関連のコンテキスト | |
timelineItem | タイムラインの項目のコンテキスト値が一致する場合。(例: "timelineItem =~ /git:file:commit\b/") |
拡張機能関連のコンテキスト | |
extension | 拡張機能のIDが一致する場合。(例: "extension == eamodio.gitlens") |
extensionStatus | 拡張機能がインストールされている場合。(例: "extensionStatus == installed") |
extensionHasConfiguration | 拡張機能に設定項目がある場合。 |
グローバルUI関連のコンテキスト | |
notificationFocus | 通知がキーボードフォーカスされている場合。 |
notificationCenterVisible | 通知センターがVS Codeの右下に表示されている場合。 |
notificationToastsVisible | 通知トーストがVS Codeの右下に表示されている場合。 |
searchViewletVisible | 検索ビューが開かれている場合。 |
sideBarVisible | サイドバーが表示されている場合。 |
sideBarFocus | サイドバーがフォーカスされている場合。 |
panelFocus | パネルがフォーカスされている場合。 |
inZenMode | ウィンドウがZenモードになっている場合。 |
isCenteredLayout | エディタが中央レイアウトモードになっている場合。 |
workbenchState | ワークベンチの状態(空、フォルダ(1フォルダ)、またはワークスペース)。 |
workspaceFolderCount | ワークスペースフォルダの数。 |
replaceActive | 検索ビューで置換テキストボックスが開かれている場合。 |
view | コマンドを表示するビューの場合。(例: "view == myViewsExplorerID") |
viewItem | ツリーアイテムのcontextValueが一致する場合。(例: "viewItem == someContextValue") |
webviewId | コマンドを表示するWebview IDの場合。(例: "webviewId == catCoding") |
isFullscreen | ウィンドウがフルスクリーンの場合。 |
focusedView | 現在フォーカスされているビューの識別子。 |
canNavigateBack | 戻る操作が可能な場合。 |
canNavigateForward | 進む操作が可能な場合。 |
canNavigateToLastEditLocation | 最後に編集した場所への移動が可能な場合。 |
グローバルエディタUI関連のコンテキスト | |
textCompareEditorVisible | 少なくとも1つの差分(比較)エディタが表示されている場合。 |
textCompareEditorActive | 差分(比較)エディタがアクティブな場合。 |
editorIsOpen | エディタが1つ以上開かれている場合。 |
groupEditorsCount | グループ内のエディタ数。 |
activeEditorGroupEmpty | アクティブなエディタグループにエディタがない場合。 |
activeEditorGroupIndex | エディタグループの位置を反映する番号(1から開始)。グリッドの左上隅にあるグループは1となる。 |
activeEditorGroupLast | グリッド内で最後のエディタグループの場合、真となる。 |
multipleEditorGroups | 複数のエディタグループが存在する場合。 |
activeEditor | グループ内でアクティブなエディタの識別子。 |
activeEditorIsDirty | グループ内でアクティブなエディタに未保存の変更がある場合。 |
activeEditorIsNotPreview | グループ内でアクティブなエディタがプレビューモードではない場合。 |
activeEditorIsPinned | グループ内でアクティブなエディタが固定されている場合。 |
inSearchEditor | 検索エディタ内でフォーカスされている場合。 |
activeWebviewPanelId | 現在アクティブなWebviewパネルのID。 |
activeCustomEditorId | 現在アクティブなカスタムエディタのID。 |
設定関連のコンテキスト | |
config.editor.minimap.enabled | 設定 editor.minimap.enabled が有効な場合、真となる。 |
Discussion