概要と注釈
Cursorインストール時にcode
コマンドでCursorを呼び出せるよう設定したら逆にcode
コマンドでVSCodeが起動できなくなった。これを解決する。
環境はWindows11。それと
この形式の文書はcopilotからの出力
である。
どうやって解決したか
結論
実行可能ファイルとコマンドファイルをまとめて削除したら動いた。
経緯
CursorでAIの言いなりになってコーディングしていたけども、なんだかUIは気に食わないと思っていた。そんなとき、ふとCodyをインストールしてVSCodeを使えばよくね?(今更)の気持ちになった今日このごろ。なのでVSCodeに戻ろう…という試みをしたものの、
code .
を実行するとVSCodeが起動しない!!勝手にCursorが起動してしまう(そういう設定にしたのは自分だけども)。なのでこれを解決しよう。
なんとなくCursorをアンインストールするのも嫌だったのでコマンドの挙動だけを変更するという試みをした。まずはcode
コマンドの呼び出し元を確認。
$ where code
C:\Users\<user name>\scoop\apps\cursor\0.49.6\resources\app\bin\code
C:\Users\<user name>\scoop\apps\cursor\0.49.6\resources\app\bin\code.cmd
ふむふむ。これを削除すればCursorを呼び出せなくなるっぽい。というかなんだこのcode, code/cmd
って。
code
: これは、実行可能ファイル (executable file) であることが多いです。拡張子がない場合、Windows では通常、実行可能ファイルとして扱われます。このファイルは、Cursor または VSCode の本体を起動するためのプログラムです。code.cmd
: これは、コマンドファイル (command file) またはバッチファイル (batch file) と呼ばれるものです。テキストファイルであり、一連のコマンドが書かれています。code.cmd は、code コマンドを実行するためのスクリプトのようなもので、例えば、環境変数を設定したり、引数を処理したりしてから、実際の code 実行可能ファイルを呼び出す、といった処理を行うことがあります。
へえ。エンジニアの赤ちゃんだから実行可能ファイルとかコマンドファイルとかわからない。もう少しかみ砕いてもらおう。
実行可能ファイル (Executable File)
- 役割: 実行可能ファイルは、コンピュータが直接実行できる命令が書かれたファイルです。プログラムの本体であり、ダブルクリックしたり、コマンドラインから名前を入力したりすることで、プログラムが起動します。
- 拡張子: Windows では、.exe、.com などが代表的な拡張子です。ただし拡張子がない場合でも実行可能ファイルとして扱われることがあります。
- 例: VSCode の code (拡張子なし) や、多くのソフトウェアの .exe ファイルが該当します。
- 仕組み: 実行可能ファイルには、CPU が理解できる機械語や、OS が解釈できる中間言語 (例えば、.NET Framework の場合は CIL) が含まれています。OS はこれらの命令を順番に実行することで、プログラムの機能を実現します。
コマンドファイル (Command File) / バッチファイル (Batch File)
- 役割: コマンドファイルは、一連のコマンドを記述したテキストファイルです。コマンドプロンプトや PowerShell などのコマンドインタープリタによって解釈・実行されます。複数のコマンドをまとめて実行したり、条件分岐や繰り返しなどの制御構造を記述したりすることができます。
- 拡張子: Windows では、.cmd や .bat が代表的な拡張子です。
- 仕組み: コマンドインタープリタは、コマンドファイルを1行ずつ読み込み、記述されたコマンドを実行します。コマンドファイルは、環境変数の設定、ファイルのコピー、プログラムの起動など、様々な処理を自動化するために利用されます。
要はカレントディレクトリでcode .
と打つとcode.exe
やcode.cmd
を探しに行って、実行しているわけだ。それでCursorをVSCodeより先に見つけてしまうので、code
コマンドがCursorを呼び出してしまうということか(多分)。それではcode
コマンドを削除してしまえばよさそう。
$ rm code code.cmd // cdしたうえで実行
ターミナルを再起動してcode
コマンドを実行してみるとVSCodeが起動した。解決。よかった。
完全な理解は将来の自分に丸投げしました。