以下の内容はhttps://thinkami.hatenablog.com/entry/2025/05/06/174742より取得しました。


Switch2IDEAとSwitch2Cursorを使って、ファイルの同じカーソル位置でJetBrains IDEとVisual Studio Code を切り替える

Clineが対応した内容をJetBrains IDEで修正する場合、エディタの切り替えが不便です。

そんな中、以下の資料を見たところ、 Switch2IDEASwitch2Cursor を使うことで、 ファイルの同じカーソル位置でJetBrains IDEVisual Studio Code を切り替えられると知りました。
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development - Speaker Deck

それら2つはプラグインとして提供されているため、

を行うと、macでは

  • Option + Shift + P というショートカットで、 JetBrains IDE と Cursor で同じプロジェクトを開ける
  • Option + Shift + O というショートカットで、 JetBrains IDE と Cursor で同じファイルの同じ行を開ける

となるようでした。

 
自分はCursorではなく Visual Studio Code (VS Code) + Cline をメインで使っていることから、JetBrains IDEVS Code の間で同じようにできないか気になりました。試してみたところ実現できたことから、メモを残します。

 
目次

 

環境

 

調査

プラグインをデフォルトのままで動かしてみたところ、以下の結果となりました。

  • RubyMine上でSwitch2Cursorのショートカットを使ったが、動作しない
  • VS Code上でSwitch2IDEAのショートカットを使ったところ、動作した

 
次に、GitHubのissueで似たような事例がないかを確認したところ、すでにVS Codeで開きたいというissueがありました。
[Feature] Support open in vscode/vscode-insiders · Issue #10 · qczone/switch2cursor

ここで著者が「 Cursor PathVS Codeのアプリケーション名を指定すれば動作する」旨の投稿をしていたことから、VS Codeでも実現できそうでした。

 
次に、Switch2Cursorのソースコードを読んで、どのように実装しているかを確認しました。

まずは、プロジェクトを開く機能です。
https://github.com/qczone/switch2cursor/blob/v1.0.3/src/main/kotlin/com/github/qczone/switch2cursor/actions/OpenProjectInCursorAction.kt#L27

単に open -a を使って、 $cursorPath のアプリで開いているだけでした。

 
続いて、ファイルを開く機能です。
https://github.com/qczone/switch2cursor/blob/v1.0.3/src/main/kotlin/com/github/qczone/switch2cursor/actions/OpenFileInCursorAction.kt#L36

こちらも open -a を使っていました。ただ、openコマンドの引数が "cursor://file$filePath:$line:$column" とハードコーディングしてあり、 VS Code で開けるのかは気になりました。

 

動作確認

JetBrains IDE側の設定を変更するため、 Settings > Tools > Switch2Curosr を選択します。

次に CursorPath へ Visual Studio Code を設定します。この値は which code の値ではなく、 ls -d /Applications/Visu* で出てきた名前から .app を省いた値です。

 
この状態で、特定のファイルを開いて RubyMine から Option + Shift + O を押すと、VS Codeで該当のファイルが開きます。

ただ、

An external application wants to open 'path/to/file:28:21' in Code. Do you want to open this file or folder?

のようなメッセージが表示されるため、 Yes ボタンをクリックする(もしくはEnterキーを押す)必要があります。

 
次にVS Code側の設定です。

まずはRubyMineの場所を確認します。

JetBrains ToolboxでRubyMineをインストールしている場合、JetBrains Toolbox の RubyMine の設定ページからインストール場所をコピーします。今回の場合、インストール場所として /Users/kamijo/Applications/RubyMine.app が設定されていることとします。

続いて、VS CodeのSwitch2IDEAの設定ページを開き、 IDEA executable path に上記でコピーしたパスを貼り付けます。

これで準備が完了です。

 
では、動作確認です。

VS CodeOption + Shift + O を押すと、RubyMineで該当のファイルが開きます。

これら2つのプラグインはCursor専用かもしれないと思っていましたが、VS Codeでも動くことが確認できました。

 

Switch2Cursorをforkして、VS Codeへ対応する

ところで、Switch2CursorによりVS Codeで開くと毎回メッセージが表示されるため、都度 Yes とするのは手間です。

いちおう Allow opening local paths without asking というチェックボックスもあり、ここにチェックを入れればメッセージは非表示になりそうです。ただ、セキュリティ的な観点からはチェックを入れたくありません。

GitHubソースコードを読む限り、コマンド部分だけ Cursor から VS Code へ差し替えると動作しそうに見えたため、forkして試してみることにします。

なお、Windowsの動作確認環境がないため、今回はmacだけでの対応とします。

 

環境構築

自分のリポジトリへfork後、ローカルへcloneします。

cloneしたリポジトリIntelliJ IDEAで開き、次のようなビルドまわりの設定を行います*1

  • Project Structure から、SDKjbr-17 (JetBrains Runtime 17.0.14) を指定
  • Edit Configuration から、 Gradle を選び、 以下を設定
    • Runに build を指定したもの
    • Runに clean を指定したもの

 

ソースコードの修正

今回は3つのファイルを修正します。

 

OpenFileInCursorAction.kt

元々の実装は open を使っていました。ここを修正すれば良さそうです。

System.getProperty("os.name").lowercase().contains("mac") -> {
    arrayOf("open", "-a", "$cursorPath", "cursor://file$filePath:$line:$column")
}

 
Openの代わりに code コマンドで起動すれば良さそうな気がしました。ためしに、 open の代わりに code コマンドを渡す

arrayOf("code", filePath)

としてみたところ、VS Codeは起動できずにエラーとなりました。一方、 which code で表示される値を arrayOf の先頭の要素として設定したところ、VS Codeで指定したファイルが開きました。

which code の結果は環境により異なることも踏まえ、今回は「 which code で取得できる値を、JetBrains IDEの設定にある CursorPath で指定する」方法を採用することにしました。

 
次に、 code コマンドでファイルの行数や列位置を指定して開くオプションを調べたところ、 -g が使えそうでした。

% code --help
Visual Studio Code 1.99.3

Usage: code [options][paths...]

To read from stdin, append '-' (e.g. 'ps aux | grep code | code -')

Options
  -g --goto <file:line[:character]>          Open a file at the path on the specified line and character position.

 
ここまでを踏まえて次のように実装としたところ、ファイルの同じカーソル位置で VS Code が開きました。

System.getProperty("os.name").lowercase().contains("mac") -> {
    arrayOf(cursorPath, "-g", "$filePath:$line:$column")
}

 

OpenProjectInCursorAction.kt

こちらも、元々は open を使っていました。

System.getProperty("os.name").lowercase().contains("mac") -> {
    arrayOf("open", "-a", "$cursorPath", projectPath)
}

 
これを、先ほどと同じような方針で修正します。

System.getProperty("os.name").lowercase().contains("mac") -> {
    arrayOf(cursorPath, projectPath)
}

 

build.gradle.kts

今回の修正したプラグインがインストールされていることを確認しやすくするよう、バージョンをちょっとだけ上げます。

version = "1.0.3.1"

 

ビルド

修正が終わったところでビルドします。環境構築で追加したGradleの build を実行します。

ビルドが終わると、 build/libs/ ディレクトリに switch2cursor-1.0.3.1.jar ができました。

 

動作確認

forkしたプラグインをRubyMineへインストールして動作確認します。

RubyMineへ次の設定を行います。

  • Settings > Plugins > 歯車マーク > Install Plugin from Disk で、先ほどビルドしたファイルを指定
  • Settings > Tools > Switch2Cursor にある Cursor Path/usr/local/bin/code ( which code して表示されたときの値) を設定

 
続いて次の操作を行い動作確認しましたが、良さそうです。

  • RubyMineで Option + Shift + P を押すと、VS Codeで同じプロジェクトが開く
    • このとき、 「An external application wants to open」のようなメッセージが出ないこと
  • RubyMineで Option + Shift + O を押すと、VS Codeで選択したファイル・行が開く
    • このとき、 「An external application wants to open」のようなメッセージが出ないこと

 
1点気になるのは、RubyMineからVS Codeを開くと、VS Codeのアイコンが増えたり減ったりすることでしょうか。このあたりは使っていくうちにどうしようか考えるかもしれません。

 

ソースコード

forkしたリポジトリはこちらです。
https://github.com/thinkAmi-sandbox/switch2cursor

VS Code向けの修正が入っているプルリクはこちら。もしビルドしたい場合は、このプルリクのブランチを使ってください。
https://github.com/thinkAmi-sandbox/switch2cursor/pull/1

*1:筆者はUltimateを使いますが、Communityでも大丈夫そうです




以上の内容はhttps://thinkami.hatenablog.com/entry/2025/05/06/174742より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14