Text_Search_Jump

検索語句が見つかった行のテキストを順番にポップアップメニューで表示、その行へジャンプするAHKスクリプト


第一引数に検索したいテキストファイルのフルパスを設定してこのスクリプトを実行させるとInputBoxが表示されます。その中に検索したい語句をセット(1つだけ)してEnter or OKボタンを押すことで「見つかった検索語句がある行のテキスト」を上から順番にポップアップメニューで表示します。またメニューで選択した「検索語句のあるテキストの行」をエディタで開きます。見つかった語句が一つの場合、メニューを表示させずにそのまま開きます。起動オプションで開く行番号を指定できるエディタでなければ使えません。また検索する際に英字の大文字、小文字は区別されません。


;エディタのフルパス
editor = C:\Program Files\EmEditor\emeditor.exe
;行番号を指定するオプション
edlineop = /l
If 1 =
{
msgbox,引数を設定してください
return
}
InputBox,Searchword,Search,,,300,100
If ErrorLevel = 1
{
return
}
;ファイル読み込み
Loop,Read,%1%
{
IfInString,A_LoopReadLine,%Searchword%
{
Find_%A_Index% = %A_Index%%A_Space%%A_LoopReadLine%
List :=Find_%A_Index%
;長さをチェック
StringLen,Len,List
if Len > 260
{
;260文字目より先はカット
StringLeft,List,List,260
}
menu,list,add,%List%,open
;メニューの数をチェック
menunum +=1
If menunum = 1
{
o_s = %A_INDEX%
}
}
}
;見つからなかったら終了。
If List =
{
msgbox,%Searchword%は見つかりませんでした
return
}
;一個しか見つからなかった場合そのまま開く
If menunum = 1
{
Run,%editor% %edlineop% %o_s% "%1%"
return
}
;メニュー表示
CoordMode,Menu,Screen
menu,list,show,450,300
return
;開く
open:
;検索文字がある行のテキストと行番号をスペースで区切ってるのでそれを手がかりに行番号を調べる。
StringSplit,linenum,A_ThisMenuItem,%A_Space%
;エディタによっては/op=numみたいになるかも。
Run,%editor% %edlineop% %linenum1% "%1%"
return


メニューで表示できる最大の文字数は260らしい。実際、260文字もあるとかなり横長に表示されてしまう。100文字くらいにカットしてみた方がいいかもしれない。ポチエス(.S)なんかに登録してみると結構便利です。PPxの余ってるキーにも割り当てました。使ってみるとMnzkFindListの超簡易版って感じがする。もともと「オンラインソフトの設定ファイルを開くため」に書いたので検索語句は一つで足りると思う。というか増えたらいろいろ面倒なことになりそう。あと検索語句をハイライト(Emeditorで)出来たりしたらおもしろいと思うんだけど・・・なんかいい方法が思いつかない。