Qiitaへの初投稿がVSCodeの拡張機能ネタというのは、つまり最近の地bンがすっかりハマってしまっているということです。Markdownとかコーディングとか。
本題:同じ境遇の人、いる?
さぁ作業を始めよう!と勇んでVSCodeを起動したら、まずやることはメモ替わりにしてる.mdの確認ですよね?みなさん??(詰め寄り)
と、テキストなんかを打ち込んだり整理したりとキーボードを叩き始めると、あら不思議。
バックスペースが利かねぇ
なんでや!何回やっても文字消せん!どうないなっとんや!?(※私は青森県出身です)
右下を見やると、こんなメッセージボックスが…
(ちなみに僕のThemeはHarf-Lifeです。一生3待ってます)
このボックスをクソ真面目にコピペするとこんなメッセージ
"key": "backspace", "command": "-markdown.extension.onBackspaceKey", "when": "editorTextFocus && !editorReadonly && editorLangId == 'markdown'"
疑問:なにこれ?(ゴ○リ)
そもそもの根本を話すと、
"-markdown.extension.onBackspaceKey"というコレ、
「Markdown All in One(以後、MD-AiOと略称)」という大変便利で有能な拡張機能に搭載された、バックスペースキーに関する高度な主要機能。
が、起動時に正常に作動しないと、超能力と一緒にただ文字を消すためだけに入力したつもりのバックスペースキー自体がVSCode上で作動しなくなる。というからくりなのです。
この活動を始めてから1年ほどと日が浅い自分ですが、最近Claudeに課金して悠々自適なエンジニアリング生活を送っているので、実際にClaudeにリサーチさせてみました。
その結果出力されたレポートは大変長いものなので、ここではかいつまんで次の章で原因や解決方法の一端をお話し、皆様へ共有しておきます。
原因究明:なぜエラーが発生するのか?
すごくざっくりいうと、「拡張機能の遅延読み込み」によるものです。
MD-AiOがVSCode起動と共にアクティベートされる段階で、当然キーバインド周りの調整を始めます。じゃないと、バックスペースキーを押すとどういう機能が動く、という拡張ができないからです。拡張機能だけに(激寒)
Claudeが細かく列挙した技術的要因は上記のことを含めて主に3️点あります。(抜粋コピペ)
- レースコンディション: キーバインディングの評価が拡張機能のアクティベーション完了前に実行される
- 単一スレッド制約: VS Code拡張機能ホストが単一スレッドで動作するため、重い拡張機能が読み込み時間を延長
- 依存関係の複雑さ: vscode.markdown-language-featuresとの依存関係による初期化遅延
1についてはさっきもお話した通りで、キーバインドの拡張機能アクティベートが完了する前にバックスペースキーを押す、とかで発生しうる。つまり「オメェ、気が早ぇんだよ!」って怒られてる状態。
2については他にもインストールされている拡張機能の中で重たいものの読み込みが遅いために、MD-AiOのアクティベートが遅れる=キーバインドがちゃんと有効化されないという状態に陥ること。
3はVSCodeにそもそも標準搭載されているMarkdown用の基本機能。
MD-AiOはこの機能をまさしく拡張してる機能です。そのため、被ってる機能もいくつかあり、機能を同期して初期化、使えるようにするまでにかかる時間=遅延が理由で、キーバインドが正常に作動しないわけです。
これらを総合して要約します。
「落ち着け」
対策:っても、ワシは早く触りたいんじゃ!
Claudeは便利です。対策も考えてって付け加えると、ちゃんとレポートに加えてくれますし、(個人的体感ですが)他の競合AIと比較にならないくらい性格で詳しく、再帰性に富んだ内容を出力してくれます。みんな、Claude使おう!(プロモじゃないです)
Claude
…話を戻して、やれそうな対策を要約して列挙しますので、ぜひご参考にして、ご自身のVSCodeライフを快適になるようご調整ください。
主に2点あります
- キーバインディングの削除
これは強引そうで小ネタでもある。そもそも競合してる**"-markdown.extension.onBackspaceKey"**を削除しちゃう。
**え?いいの?**と思ったあなた、鋭いです。でも後ほど対策お話するので、一端どうすればいいのかという話にだけお付き合いください。
- 手順:
- コマンドパレット(Ctrl+Shift+P)を開く
- 「Preferences: Open Keyboard Shortcuts」を検索・実行
- 検索ボックスに「markdown.extension.onBackspaceKey」を入力
- 該当項目を右クリック→「Remove Keybinding」を選択
- 以下の部分を削除
{ "key": "backspace", "command": "-markdown.extension.onBackspaceKey", "when": "editorTextFocus && !editorReadonly && editorLangId == 'markdown'" }
- 拡張機能キャッシュのクリア
この手順は、正直メンドクサイのでオススメはシませんが、対処方法ではあるので上げておきます。- VS Codeキャッシュフォルダの場所:
- Windows: %APPDATA%\Code\CachedData
- macOS: ~/Library/Application Support/Code/CachedData
- Linux: ~/.config/Code/CachedData
- VS Codeキャッシュフォルダの場所:
- 手順:
- VS Codeを完全終了
- 上記フォルダの内容を削除
- VS Codeを再起動
- コマンドパレットで「Developer: Restart Extension Host」を実行
**めんどくさ!**ナシ。
代替案使うなら、PADとかで自動化してもいいけど、ワシはVSCodeだけで解決したいんじゃ!
というわけで、ここからは対策1に関するデメリットと、そのさらなる対策をご紹介します。
調整:勇気をだせ!どうせ書き直せる。
前述で上げた「1. キーバインディングの削除」についてそれなりに危機感を抱いた方は、既に熟練者ですから馬のなんとか念仏かもしれません。
とはいえ、お付き合いを。
markdown.extension.onBackspaceKeyを削除した際の具体的なデメリット
1.リストレベルの自動調整機能
-
失われる機能
- リストマーカー(-,*,1.,とか)の直後でバックスペース使うとインデントレベルが1️段階落ちる。まじかよ。あんな便利な機能が…。
2. 空のリスト項目の削除機能
-
失われる機能
- 空のリストでバックスペースすると、リストマーカーごと削除できる。
3. CommonMark仕様準拠のインデント制御
-
失われる機能
- 番号付きと箇条書きリストのインデント自動調整。
- 失われると「手動でスペースキー使ってインデント調整しなきゃいけない」
- 番号付きと箇条書きリストのインデント自動調整。
統括:リスト編集の効率性低下
- ワンキー操作の喪失:インデント変更が複数キー操作になる
- 視覚的なフィードバック不足:インデントレベルの変更が即座に反映されない
- 一貫性の維持困難:手動調整により、インデント幅の不統一が発生しやすい
標準機能とMD-AiOとの依存関係
ここで機能的に依存度の高い「markdown-language-featuresMarkdown」との比較表を提示しておさらいします。
機能 | markdown-language-features | Markdown All in One |
---|---|---|
基本プレビュー | ✅ 提供 | ❌ 依存 |
アウトライン | ✅ 提供 | ❌ 依存 |
パス補完 | ✅ 提供 | 🔧 拡張 |
リスト編集 | ❌ なし | ✅ 提供 |
TOC生成 | ❌ なし | ✅ 提供 |
数式プレビュー | ✅ 提供 | 🔧 拡張 |
ショートカット | 基本のみ | ✅ 豊富 |
こうして見ると、基礎に使ってるはいえ、結構依存度が高いことが伺えますね。
逆にほっといてもVSCodeでMarkdown書くのそんなに苦労しないのでは・・・?ゲフンゲフンッ
んんっ!
…と、ここまで聞くと、Markdown信者が見たら泡を吹くほどのデメリットですが、ご安心を。
Claudeくんはちゃんとした対策も用意してくれました。
設定ファイルによる対処法
settings.jsonを弄ります(でしょうね)
- ユーザー設定(settings.json)に以下を追加:
{ "markdown.extension.syntax.decorations": false, "markdown.extension.list.indentationSize": "inherit", "markdown.extension.orderedList.autoRenumber": false, "markdown.extension.preview.autoShowPreviewToSide": false }
拡張機能の安全な無効化・有効化
- ワークスペース単位での制御:
{ "extensions.autoCheckUpdates": false, "extensions.autoUpdate": false, "markdown.extension.completion.enabled": false }
予防策と最適化
拡張機能管理のベストプラクティス
- 最小構成: 必要最小限の拡張機能のみをインストール
- 単一目的: 同一機能の拡張機能を重複インストールしない
- 定期メンテナンス: 月1回程度のキャッシュクリアを実行
パフォーマンス最適化
{
"editor.quickSuggestions": false,
"editor.wordWrap": "on",
"[markdown]": {
"editor.quickSuggestions": false,
"editor.suggest.showWords": false
}
}
...最後の予防策と最適化で、ぐうの音もでねぇ、って気持ち。
結論:落ち着け!でも、あきらめんなよ!
結局のところ、キーバインド周りの設定自体を消して、他の部分で補完する、というのが要約となります。
でも、予防策と最適化は比較的むずかしくありません。
ここでは割愛しますが、拡張機能はリストアップできますし、コマンド使って一括削除もできます。
なんならリストアップしたらAIにぶん投げて整理させればいいです。そのとき「React使ってるから、コレは許して」とか付け足せば、ちゃんとAIくんは配慮してくれ(るはず)ます。
定期メンテナンスはそれこそキャッシュクリアですから、PADあたりに仕込んでもいいですね。僕はまだそこまで出来てないので、研究の余地ありですが。。。
最後に:だって、調べたら日本語で解説してるのQiitaの1記事(しかも1年以上前)だったんだもん!
タイトルに動機書いちゃった!
色々手を出していくとVSCodeは便利になる一方で、拡張機能と標準機能の間の瀬戸際で発生する問題を誘発したりもします。
ですから、長らく使ってる人も、これから使う人も、使い始めて困ってる人も、ぜひまずは拡張機能の整理を!啓蒙させていただいて、締めさせていただきます。
ここまでご覧いただきありがとうございました。
皆様の快適なコーディングライフが最適化される一助になれていたら幸いです。