VSCodeの拡張機能が動かなくなった

Visual Studio Code拡張機能が動かなくなった。 原因としては markdown-all-in-one という拡張機能がうまくアンインストールできていなかったから。 調査の記録を記事として書きました。

f:id:itib:20220121145438p:plain

現象

拡張機能を使おうとすると Command 'Live Share: Join Collaboration Session' resulted in an error (command 'liveshare.join not found) と表示されて拡張機能が動作しない。 LiveShareだけかと思ったらその他の拡張機能も同様に開くことができなくなっていた。

調査

拡張機能が存在するか調査

code --list-extentions コマンドでVSCodeに入っている拡張機能一覧を取得する。

ref: Managing Extensions in Visual Studio Code

❯ code --list-extensions
4ops.terraform
aws-scripting-guy.cform
christian-kohler.path-intellisense
CoenraadS.bracket-pair-colorizer
Darfka.vbscript
DavidAnson.vscode-markdownlint
donjayamanne.githistory
eamodio.gitlens
esbenp.prettier-vscode
funkyremi.vscode-google-translate
GitHub.vscode-pull-request-github
Gruntfuggly.todo-tree
hashicorp.terraform
hediet.vscode-drawio
jebbs.plantuml
ms-azuretools.vscode-docker
ms-python.python
ms-python.vscode-pylance
ms-toolsai.jupyter
ms-toolsai.jupyter-keymap
ms-toolsai.jupyter-renderers
ms-vscode-remote.remote-containers
ms-vscode-remote.remote-ssh
ms-vscode-remote.remote-ssh-edit
ms-vscode-remote.remote-wsl
ms-vscode-remote.vscode-remote-extensionpack
ms-vscode.powershell
ms-vsliveshare.vsliveshare
ms-vsliveshare.vsliveshare-audio
ms-vsliveshare.vsliveshare-pack
redhat.java
redhat.vscode-commons
redhat.vscode-yaml
streetsidesoftware.code-spell-checker
Tyriar.sort-lines
VisualStudioExptTeam.vscodeintellicode
vscjava.vscode-java-debug
vscjava.vscode-java-dependency
vscjava.vscode-java-pack
vscjava.vscode-java-test
vscjava.vscode-maven

開けなかった拡張機能は存在していることになっている...

拡張機能ディレクトリにもしっかりあるか確認

❯ ls ~/.vscode/extensions
4ops.terraform-0.2.2
aws-scripting-guy.cform-0.0.24
christian-kohler.path-intellisense-2.6.0
christian-kohler.path-intellisense-2.6.1
coenraads.bracket-pair-colorizer-1.0.62
darfka.vbscript-1.0.4
davidanson.vscode-markdownlint-0.45.0
donjayamanne.githistory-0.6.19
eamodio.gitlens-11.7.0
esbenp.prettier-vscode-9.1.0
funkyremi.vscode-google-translate-1.4.13
github.vscode-pull-request-github-0.34.3
gruntfuggly.todo-tree-0.0.214
gruntfuggly.todo-tree-0.0.215
hashicorp.terraform-2.18.0
hashicorp.terraform-2.19.0
hediet.vscode-drawio-1.6.4
jebbs.plantuml-2.17.0
jebbs.plantuml-2.17.1
jebbs.plantuml-2.17.2
ms-azuretools.vscode-docker-1.18.0
ms-azuretools.vscode-docker-1.19.0
ms-python.python-2021.12.1559732655
ms-python.vscode-pylance-2021.11.0
ms-python.vscode-pylance-2022.1.0
ms-python.vscode-pylance-2022.1.1
ms-toolsai.jupyter-2021.10.1001414422
ms-toolsai.jupyter-2021.11.1001550889
ms-toolsai.jupyter-2021.9.1101343141
ms-toolsai.jupyter-keymap-1.0.0
ms-toolsai.jupyter-renderers-1.0.4
ms-vscode-remote.remote-containers-0.202.5
ms-vscode-remote.remote-containers-0.209.6
ms-vscode-remote.remote-ssh-0.70.0
ms-vscode-remote.remote-ssh-edit-0.70.0
ms-vscode-remote.remote-wsl-0.63.13
ms-vscode-remote.vscode-remote-extensionpack-0.21.0
ms-vscode.powershell-2021.12.0
ms-vsliveshare.vsliveshare-1.0.5065
ms-vsliveshare.vsliveshare-1.0.5242
ms-vsliveshare.vsliveshare-1.0.5273
ms-vsliveshare.vsliveshare-audio-0.1.91
ms-vsliveshare.vsliveshare-pack-0.4.0
redhat.java-1.2.0
redhat.vscode-commons-0.0.6
redhat.vscode-yaml-1.2.2
redhat.vscode-yaml-1.3.0
streetsidesoftware.code-spell-checker-2.0.14
streetsidesoftware.code-spell-checker-2.1.3
streetsidesoftware.code-spell-checker-2.1.4
tyriar.sort-lines-1.9.1
visualstudioexptteam.vscodeintellicode-1.2.15
vscjava.vscode-java-debug-0.37.0
vscjava.vscode-java-dependency-0.18.9
vscjava.vscode-java-pack-0.20.0
vscjava.vscode-java-test-0.33.1
vscjava.vscode-maven-0.34.2
yzhang.markdown-all-in-one-3.4.0

一覧表示してもわかりにくいので表示のdiffを取ります。

❯ diff -i <(ls ~/.vscode/extensions | sed 's/-[0-9].*$//g' | uniq) <(code --list-extensions)
42d41
< yzhang.markdown-all-in-one

なんかフォルダだけに残っている拡張機能がありますね👀

コマンドの解説

diffコマンド

対象のファイルの差分を出力します。 比較するファイルとしてコマンドの実行結果を渡すには <() を用いて名前付きパイプとするとあたかもファイルのように比較することができます。

まだ diff -i で大文字と小文字の変化を無視することができます。

qiita.com

lsとsedコマンド

みんなの強い味方 sed

-[数字] を空白に置換することで vscode/extentions の表示に含まれるバージョン情報を削除しています。

ls ~/.vscode/extensions | sed 's/-[0-9].*$//g'

~ ❯ ls ~/.vscode/extensions | tail -n 3
vscjava.vscode-maven-0.34.2
yzhang.markdown-all-in-one-3.4.0
~ ❯ ls ~/.vscode/extensions | sed 's/-[0-9].*$//g' | tail -n 3
vscjava.vscode-java-test
vscjava.vscode-maven
yzhang.markdown-all-in-one

uniq コマンド

表示行で重複するものを消せる。 複数バージョンの拡張機能があると複数フォルダが表示されて嶋う。uniq コマンドで重複を消している

検証

ファイルはあるけどVSCode側にインストールされていない拡張機能を削除。

❯ rm -rf ~/.vscode/extensions/yzhang.markdown-all-in-one-3.4.0

うまく動くようになった! f:id:itib:20220121153845p:plain

どうやら Markdown all in one を過去にアンインストールした際にファイルが残り続けてしまったことが原因らしい。

探してみるとネット上にもちらほらそんな記事が存在した。

qiita.com

最後に

無事に拡張機能が使えるようになってよかったです。 最近読んだシェルノック本がとても役立ちました。

いままでsedでどうやるんだっけ...とか悩むことがありましたがその頻度も減ってきていい感じです。 おすすめ。