設定を失わずに VS Code をリセットまたは削除する
Visual Studio Code をゴミ箱にドラッグするとエディタは消え、設定は一切消えません。これは意図的な仕様でドキュメントにも書かれており、何かを直そうと再インストールしたあとも、多くの人が VS Code を以前のまま見つける理由です。
まっさらにするために消すなら、肝心なのはアプリ本体ではありません。
設定は2つのディレクトリに置かれている
VS Code はユーザーの設定と状態をアプリケーションバンドルの外に置きます。
~/Library/Application Support/Code
~/.vscode
前者には設定、キーバインド、ワークスペースの状態、拡張機能が保存したデータが入ります。後者には拡張機能そのものが入ります。
ドキュメントは、これらを消した結果をはっきり書いています。VS Code を入れる前の状態に戻り、設定はすべてリセットされます。それが工場出荷状態の正しい説明であり、固まったウィンドウを直そうとしていたなら望んだ結果ではありません。
まず望む結果を決める
アンインストールと呼ばれている作業は 3 種類あり、消す量も違います。
壊れたインストールを直すための再インストール:アプリだけ消す。すべて戻ります。問題が設定や拡張機能にあったなら何も起きません。それが想定どおりの結果です。
きれいなエディタから始める:アプリと両ディレクトリを消す。戻したい設定があるなら先に書き出してください。
容量を空ける:どちらも消さない。容量はほぼ常にエディタ本体ではなくプロジェクトごとのキャッシュにあり、それ用の別記事があります。
設定の同期が判断の分かれ目になる
Settings Sync がオンで、GitHub または Microsoft アカウントにサインインしているなら、設定、キーバインド、スニペット、拡張機能一覧はそのアカウントにあります。両ディレクトリを消しても安全です。新規インストールでサインインすれば戻ります。
Settings Sync がオフなら、2 つのディレクトリが唯一の記録です。2 年かけて整えた settings.json は自分が書いたファイルでありキャッシュではなく、他にコピーはありません。
消す前に確認してください。アクティビティバー下部のアカウントメニューにあり、確認そのものはこの文を読むより短く済みます。
すべて削除する場合でも拡張機能の一覧を書き出す
code --list-extensions > ~/Desktop/vscode-extensions.txt
これは VS Code がまだ入っているうちに使え、再インストール後の復旧が記憶頼りではなく、一覧をなぞるだけの作業になります。code コマンドが PATH にない場合は、コマンドパレットの Shell Command から VS Code 側で入れられます。
コマンドラインツールと残留物
アプリを消すと、もう存在しないバンドルを指す code シェルコマンドが残り、いつものキャッシュ、ログ、保存されたアプリケーション状態も残ります。どれも捨てて問題ありません。
プロジェクトごとの成果物はこの話の対象外です。リポジトリ内の .vscode フォルダはそのプロジェクトのもので、バージョン管理と一緒に扱われます。エディタを消しても触るべきではありません。
判断する前にサイズを確認する
2 つの状態ディレクトリは気づかないうちに大きくなります。拡張機能ホストは言語サーバーをキャッシュし、数 GB まで伸びるインデックスを持つ拡張機能もあります。エディタのディスク使用量がエディタ本体より大きい本当の理由は、たいていそこです。
Mole はアプリと並んで両ディレクトリのサイズを見せるので、消してよい拡張機能キャッシュと、残すべき設定ディレクトリの違いが、何かを消す前に見えます。削除先はゴミ箱です。1 時間後に必要だと気づくかもしれないディレクトリには、そこが正しい置き場です。
Settings Sync が同期するもの、同期しないもの
Settings Sync が同期するのは、設定、キーボードショートカット、ユーザースニペット、拡張機能の一覧、および一部の UI 状態です。別のマシンで同じアカウントにサインインすれば、これらは自動的に戻ってきます。
同期しないのは、ワークスペース単位の状態と、拡張機能がディスクに書き込むデータです。リポジトリ内の .vscode/settings.json はリポジトリと一緒に移動するものであり、Settings Sync の対象外です。拡張機能のインデックス、言語サーバーのキャッシュ、サインイン状態も同期されないため、再インストールした拡張機能は改めてセットアップが必要になることがあります。
アクティビティバー下部のアカウントメニューに、現在の状態が表示されます。サインイン済みと表示され、同期時刻も出ているなら、これら2つのディレクトリは削除しても問題ありません。サインインしていないと表示されている場合、それらが唯一のコピーです。