拡張機能のアンインストールで痛い目を見たので、同じことを繰り返さないようにメモします。
経緯
Visual Studio Codeの拡張機能って便利ですよね。ただ、新しい機能を追加した後、それまで動いていた他の機能が動かなくなることがあります。
久しぶりにMarkdown Preview Enhanced でフローチャートを描いたのですが、全然表示されませんでした。
どの拡張機能を追加したり削除したりしたかをバージョン管理できれば、原因の特定に役立つのではないでしょうか
注意
Gitとbatchは全然慣れていないので間違ってたらごめんなさい。
やりたいこと
- インストールしてある拡張機能の一覧をテキストファイル(以下、拡張機能一覧と呼びます)として出力する
- 拡張機能一覧をバージョン管理する
- Visual Studio Codeを拡張機能一覧の通りに構成しなおす
環境
- Windows10 1803
- Visual Studio Code 1.36.0
方法
拡張機能一覧の出力
まず、拡張機能一覧を出力します。
コマンドプロンプトを開き、拡張機能一覧を保存したい場所にカレントディレクトリを変えてから以下のコマンドを実行します。ファイル名は好きに変えてください。
code --list-extensions > extension_list.txt
拡張機能一覧をバージョン管理
最初の一度だけgitにレポジトリを追加
git init (拡張機能一覧を保存するディレクトリ)
後は拡張機能を追加/削除するたびに先ほどの拡張機能一覧の出力とgit addとgit commitを繰り返すだけです。「なんか改行変だよ」ってgitに言われますが、無視して大丈夫そうです(多分)
git add extension_list.txt
git commit extension_list.txt
いちいちコマンド叩くのがめんどくさいので、バッチにまとめてスタートアップに置きことにしました。
@echo off
REM 拡張機能一覧を置いてあるディレクトリ
cd "C:\Users\hoge\vs_extension"
code --list-extensions > extension_list.txt
REM 拡張機能一覧を更新するのを待つ
timeout /t 15
REM 前回のコミットとの差分を取得
REM 変数は毎回初期化しないと、次にバッチを実行したときに前回の値が残ってしまう
set diff=
FOR /F %%i in ('git diff') do set diff=%%i
REM 差分が出ていればコミット
REM コミットメッセージには差分をそのまま使用
REM 複数個の拡張機能に変更を加えていても一つしかコミットメッセージに表示されないので注意
if not "%diff%" == "" (
git add extension_list.txt
git commit extension_list.txt -m %diff%
)
これで自動化できる...あれ?できてないぞ
code --list-extensions > extension_list.txt
これ以降のコマンドが全く実行されません。
原因が分からなかったので、このコマンドだけ別のバッチに分けて
スタートアップに入れました。
詳しい人、どうしてなのか教えてください。
Visual Studio Codeを拡張機能一覧の通りに構成しなおす(力尽きた)
これもバッチでできるようにしたかったのですが力尽きました。ここからは手動です。
まず入っているものをアンインストール
最終的に同じ形になっていれば、どう入力しても同じです。
一行ずつ入力するのがめんどくさいので、以下のような入力方法ででやりました。
拡張機能一覧をコピー
先頭に「code 」と入力。(スクショだと抜けていますが、スペースが必要です。)
2行目から最後まで「Ctrl+Alt+↓」でカーソルを広げる
「--uninstall-extension 」をコピー&ペースト
コマンドプロンプトに貼り付けて実行
再インストール
gitで拡張機能一覧を戻したいバージョンにしてから、ほぼ同じことをします。コピー&ペーストするのが「--uninstall-extension 」の代わりに「--install-extension 」になるだけです。
やってみた感想
バッチみたいな、いかにも「私めはSIerで働かせていただいております!」って感じの技術じゃなくて、シャレオツな言語でスクリプト組めるようになりたい。