ファイル中の文字列を検索してマッチした行を指定して JetBrains の IDE で開く

agptでファイル中の文字列を検索してマッチした行を指定して JetBrains の IDEで開く方法です。
JetBrains の IDE でコマンドラインからファイルを開く方法は同じようなので、Goland を例に説明します。
JetBrains の IDE がサポートしている Windows、macOS、Linux すべてで設定可能ですが、本記事では macOS のみ説明します。

コマンドの設定

Goland をコマンドで実行できるようにします。
以下のファイルを PATH が通っている場所に配置します(/usr/local/bin など)。

#!/bin/sh open -na "GoLand.app" --args "${@}"
Code language: JavaScript (javascript)

実行権限を付与します。

$ chmod +x /usr/local/bin/goland

"Goland.app" の部分を "IntelliJ IDEA.app" に書き換え、/usr/local/bin/goland/usr/local/bin/idea にすれば IntelliJ IDEA 用の設定にできます。
それ以外の IDE にしたい場合は適宜変更してください。

Toolboxアプリを使用している場合の手順はドキュメントを参照してください。

コマンドラインから Goland でファイルを開く

以下のコマンドで Goland でファイルを開けます。

$ goland nosplash /path/to/file

nosplash は Goland のロード時にスプラッシュ画面を表示しないようにするオプションです。

行を指定してファイルを開くコマンドは以下のとおりです。

$ goland nosplash --line NUMBER /path/to/file

文字列を検索してマッチした行を開く

goland コマンドの設定と、goland コマンドでファイルを開く方法を説明したので、本題となる文字列を検索してマッチした行を開く方法についてです。
コマンドラインセレクタは peco を使い、文字列検索には ag を使います(それぞれの詳細な使い方は省略します)。
pt を使う場合は ag を pt に置き換えれば OK です。
以下の function を .bashrc や .zshrc に追加し再読み込みします。

ag-goland() { local selected_line=$(ag "${@}" | peco --query "$LBUFFER") if [ "${selected_line}" != "" ]; then if [ -f "${2}" ]; then goland nosplash --line $(echo ${selected_line} | awk -F':' '{print $1}') ${2} else goland nosplash --line $(echo ${selected_line} | awk -F':' '{print $2, $1}') fi fi }
Code language: JavaScript (javascript)

文字列検索にマッチしたファイルが無かったときや peco での選択中に Ctrl-c で実行を停止した場合は何もしないようにしてあります。また、ag の第2引数がディレクトリとファイルどちらでも動作するようにしていますが、ファイルは1つ指定することだけを想定した実装となっているので、その点はご注意ください。

使い方は以下のとおりです。

$ ag-goland PATTERN /path/to/dir $ ag-goland PATTERN /path/to/file

まとめ

ファイル中の文字列を検索してマッチした行を Goland で開く方法を紹介しました。
プロジェクト内のファイルであれば IDE の機能で同じことができるので使うことはないかもしれませんが、いろいろなプロジェクトを横断的に検索してファイルを開きたいときなどには使えるかもしれません。

リファレンス

Leave a Reply