ここでは、MikoScript で実現した以下の検索/置換機能について説明します。
現在開いている全ての編集ウィンドウ内のテキストに対する検索は、 Apsaly Version 3.10 から、「全編集テキストの検索」で 行なうになりました。ここでは、それ以前のバージョンでの機能を説明しています。
この機能は、スクリプト標準フォルダ内に あった GrepLocal.mcx という MikoSript で実現していました。これは、かつて特典機能でしたが、 実用プログラムとして参考になるので、今はソースを公開しています( Samples フォルダ内の GrepLocal.mc 参照)。
このスクリプトを実行すると、まず、検索文字列を入力するためのダイアログボックスが 表示されます。ここでは、今までの検索文字列の入力履歴が参照できます。 また、選択範囲がある時は、その文字列が、予めこの入力ボックス内に入っています。 選択範囲がない時は、現カーソル位置に単語があれば、それが入っています。
検索文字列は、必ず「正規表現」で指定する必要があります。 但し、検索文字列に、正規表現のメタ文字が含まれていなければ、特別な配慮は不要です。 例えば、英数字や全角だけの場合には、そのまま検索できます。
デフォールトの検索モードでない場合、特別な指定が必要です。例えば、 英字の大文字と小文字を区別しない場合、#i の指定が必要です。また、 正規表現のメタ文字を通常文字として検索させるには、#x の指定が必要です。
検索文字列の入力後、Enterキーを押すと、検索が開始されます。 その検索結果は、スクリプトコンソールウィンドウに出力されます。 出力結果の行を、ダブルクリックすると、タグジャンプで、 その箇所に移ることができます。
現編集テキストの選択範囲内で、「検索文字列」に一致する全ての箇所を、 「置換文字列」に置き換えるには、「選択範囲内の全置換」を行ないます。 これは、初期環境では、メインメニューの「ツール」内の 「スクリプト集」にあります。 この機能は、ReplaceAll.mc という MikoSript で実現しています。
このスクリプトの実行前には、必ず、対象の範囲を選択しておく必要があります。 この選択範囲は、矩形範囲でも可能です。
このスクリプトを実行すると、まず、検索文字列を入力するダイアログボックスが 表示されます。ここでは、今までの検索文字列の入力履歴が参照できます。
検索文字列は、必ず「正規表現」で指定する必要があります。 但し、検索文字列に、正規表現のメタ文字が含まれていなければ、特別な配慮は不要です。 例えば、英数字や全角だけの場合には、そのまま検索できます。
デフォールトの検索モードでない場合には、特別な指定が必要です。例えば、 英字の大文字と小文字を区別しない場合、#i の指定が必要です。また、 正規表現のメタ文字を通常文字として検索させるには、#x の指定が必要です。
検索文字列の入力後、Enterキーを押すと、今度は、 置換文字列を入力するダイアログボックスが表示されます。 置換文字列に、改行やタブコードを使う場合は、それぞれ、\n と \t と表記して 入力します。現状、これ以外のエスケープ文字は使えません。 しかし、@1,@2,... の表記で、一致部分を参照する置換が指定できます。
置換文字列の入力後、Enterキーを押すと、選択範囲内の全置換の実処理が開始されます。 なお、この全置換を行なうと、選択範囲のテキストのサイズ分だけ、復元バッファの容量が増えます。 そのため、この操作を何回も行なう場合は、その累積に注意する必要があります。
「ファイルから置換」は、編集中のテキストではなく、ファイルに格納されている テキストに対して行なう置換です。この置換では、ファイルの内容を書き換えるので、 充分な注意が必要です。そのため、本エディタでは、いきなりこの操作を行なうのでなく、 次のステップを踏んで行なうようになっています。
(1) | 対象のファイルに対して、「ファイルから検索(Grep)」を実行する |
(2) | その Grep 結果を確認し、置換から外したい箇所があれば、その行を手動で削除する |
(3) | 確認後の Grep 結果に基づいて、「ファイルから置換」を実行する |
このうち、ステップ(1)は、別節で説明している通りです。 Grep 結果は通常の編集テキストなので、ステップ(2)での行の削除は、 通常の編集操作になります。 Grep 結果のテキストを見易くするために、空行を適当なところに 挿入しても構いません。しかし、それ以外の編集をしてはいけません。 以降では、ステップ(3)について詳しく説明します。
ステップ(3)で行なう「ファイルから置換」は、初期環境では、 メインメニューの「検索」内にあります。 この機能は、GrepRepl.mc という MikoSript で実現しています。
このスクリプトは、Grep 結果が表示されているウィンドウ( -Grep- という タイトルの編集ウィンドウ)から起動する必要があります。 このスクリプトでは、そのウィンドウ内の現テキストの内容に基づいて、 処理が行なわれます。
このスクリプトを実行すると、初期確認が行なわれた後、置換文字列を入力する ダイアログボックスが表示されます。 置換文字列に、改行やタブコードを使う場合は、それぞれ、\n と \t と表記して 入力します。現状、これ以外のエスケープ文字は使えません。 しかし、@1,@2,... の表記で、一致部分を参照する置換が指定できます。
置換文字列の入力後、Enterキーを押すと、ファイルから置換する実処理が 開始されます。実行経過は、逐次、スクリプトコンソールウィンドウに 表示されます。また、確認のためのメッセージボックスが表示される場合もあります。
本スクリプトのコマンドオプションには、次の2種類があります。 ちなみに、初期環境では、どちらも指定して起動するようになっています。
-e | ファイルから置換を実行する前に、確認のメッセージを表示 |
-s | 各ファイルに書き込む前に、確認のメッセージを表示 |