秀丸エディタに tags ファイルを作成する機能はありますが、自分でその内容を細かく制御したかったので、tags ファイルを作成する Ruby スクリプトと、それを実行する秀丸マクロを作りました。
この Ruby スクリプトを利用すると、例えば以下の不満が解消されます。
- クラスの継承を利用している場合などに、ジャンプ先の候補として定義位置以外の選択肢が幾つも表示される。
→ 秀丸エディタの Ver8.40 からダイレクトタグジャンプが ctags 形式に対応したため、マッチさせたい部分だけをキャプチャするように正規表現を調整することで、ジャンプ先の精度が上がります。 - プロジェクトのファイルがリモートにあり、Samba などを使ってネットワーク経由でアクセスしている場合、tags ファイルの作成に時間がかかる。 → Ruby スクリプトをサーバーに置き、PuTTY などから実行することで、ファイルのアクセスに伴う通信のオーバーヘッドがなくなり、高速に tags ファイルを作成できます。Ruby スクリプトなので Windows 以外でも実行できます。
ダウンロード
※秀丸エディタ Ver8.51β2 以降で使用してください。
※Ruby 2.0.0p0 で動作確認済みです。
使い方
上記の Ruby スクリプトは、カレントディレクトリ以下のファイルを元に tags ファイルを作成します。tags ファイルを作りたい場所に置いて利用します。作成される tags ファイルの内容は、prepare メソッドの内容を変更することで自由にカスタマイズできます。デフォルトでは PHP, Ruby, Python, Perl, JavaScript, C, C++, Java, C#, 秀丸マクロ に対応しています。
秀丸マクロの方は、秀丸エディタで編集中のファイルがあるフォルダを上へと遡り、最初に見つかった prepare_tags_file.rb を実行します。見つからなかった場合は秀丸エディタ標準の [tagsファイルの作成] ダイアログを表示します。
prepare_tags_file.rb は --server オプションを指定して実行された場合には サーバーとして動き続けます。 --client を指定して実行することで、あらかじめ起動しておいたサーバーに tags ファイルを作成させることが出来ます。 この機能は、ワークスペースがリモートにある場合の利用を想定しています。
処理概要
ファイル名とファイルの内容にマッチさせる正規表現をそれぞれ指定して TagsFile#grep_and_format メソッドを実行すると、見つかった行を tags ファイル形式に変換した文字列の配列が返されます。 必要であればそれを gsub などで変換し tags ファイルに書き出します。
変更履歴
Ver.4.7 (2015-01-28)
- 秀丸エディタのバグで、ctags 形式の場合には相対パスでのダイレクトジャンプがうまく機能しないケースがあった。そのため、ctags 形式の場合は常にフルパスを tags ファイルに出力するようにしていたが、秀丸エディタ Ver8.51β2 でバグが修正されたため、ctags 形式の場合も相対パスを tags ファイルに出力できるように変更。
Ver.4.6 (2014-11-03)
- 行抽出用の正規表現を改良
Ver.4.1 (2014-01-16)
- 秀丸エディタ Ver8.40β1 でサポートされた tags ファイルの新しいフォーマットを利用
Ver.3.9
- .min.js をデフォルトの処理対象から除外
- 抽出する行の最大サイズを指定できるように修正
Ver 3.8
- ファイルごとのループにおいて、各ファイルへのパスの先頭が ./ であるとの仮定を排除
- prune の判定で文字コードの不整合による例外が発生しないよう、判定前にフォルダのパスを UTF-8 に変換
Ver 3.7
- tags ファイルの内容を SJIS で出力するように変更
Ver 3.6
- 出来るだけ不要なオブジェクトを生成せずに済むよう、文字列連結演算子を << に変更
Ver 3.5
- PHP のクラス定数と interface の定義位置を取り出すための設定を追加
- php の implements 以下を除去してから tags ファイルへ出力するよう変更
Ver 3.4
- スクリプトの末尾に接続情報を書き込む際に改行コードが変更されないよう、バイナリモードでファイルを開くように修正
Ver 3.3
- shebang を設定
Ver 3.2
- 正規表現を効率化
- 改行コードを LF に変更
Ver 3.1
- 定数の定義位置を取り出すための設定を追加
Ver 3.0
- dRuby の使用をやめ、セキュリティーを強化
- 正規表現とマッチする行を検索する時、対象とするフォルダを指定する機能を追加
- 正規表現とマッチする行を検索する時、特定のフォルダを対象外にする機能を追加
- 正規表現とマッチする行を検索する時、複数行まとめてマッチングを行う機能を追加
- デフォルトで PHP, Ruby, Python, Perl, JavaScript, C, C++, Java, C#, 秀丸マクロ に対応
- Ruby 2.0 の機能を利用
ピンバック: 秀丸エディタのお勧めの設定 | TipsZone
ピンバック: タグジャンプを試み、失敗したらダイレクトタグジャンプする秀丸マクロ | TipsZone
とても良さそうだけど、ruby 2.3で、 cannot load such file -- gserver (LoadError) が出て使えなかった。 Rubyのコマンドプロンプトで gem install gserver とやってもgserverは見つからず。これを解決している余裕はないので残念ながらパス。
gserverはRuby Gem にプロキシを設定して取れた。サーバー機能はクライアントだけで使う人にとっては面倒。・・・ただの感想です。