ファイル中の文字列を検索してマッチした行を指定してJetBrainsのIDEで開く
ag や ptでファイル中の文字列を検索してマッチした行を指定して JetBrains の IDEで開く方法です。
JetBrains の IDE でコマンドラインからファイルを開く方法は同じようなので、Goland を例に説明します。
JetBrains の IDE がサポートしている Windows、macOS、Linux すべてで設定可能ですが、本記事では macOS のみ説明します。
コマンドの設定⌗
Goland をコマンドで実行できるようにします。
以下のファイルを PATH が通っている場所に配置します(/usr/local/bin など)。
#!/bin/sh
open -na "GoLand.app" --args "${@}"
実行権限を付与します。
$ 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
}
文字列検索にマッチしたファイルが無かったときや peco での選択中に Ctrl-c で実行を停止した場合は何もしないようにしてあります。また、ag の第2引数がディレクトリとファイルどちらでも動作するようにしていますが、ファイルは1つ指定することだけを想定した実装となっているので、その点はご注意ください。
使い方は以下のとおりです。
$ ag-goland PATTERN /path/to/dir
$ ag-goland PATTERN /path/to/file
まとめ⌗
ファイル中の文字列を検索してマッチした行を Goland で開く方法を紹介しました。
プロジェクト内のファイルであれば IDE の機能で同じことができるので使うことはないかもしれませんが、いろいろなプロジェクトを横断的に検索してファイルを開きたいときなどには使えるかもしれません。