Title: 秀丸エディタQ&A捕捉事項

top秀丸エディタマクロ

update : 2017/11/04 (Sat)

1 はじめに

現在、秀丸エディタQ&A集を秀丸エディタVer.8系に対応させるよう編集作業中です。

このページの内容も、そのままではありませんが反映させている事もあり、 正規表現関連以外は、徐々に縮小・整理していきます。

2 目次

第I部〜秀丸エディタQ&A集

秀丸エディタの基本機能その他についての質問

秀丸マクロについての質問

第II部〜知っていると便利な秀丸の機能

第III部〜秀丸マクロのいろはにほへと

Ver.8は追加・変更が多いので、サイトー企画にある、秀丸エディタの紹介(Ver8.00対応版)を参照してください。

第IV部〜テキスト編集を極める!!

正規表現関連

3 第I部〜秀丸エディタQ&A集

3.1 秀丸エディタの基本機能その他についての質問

3.1.1 [HME0084A]●行をソートすることは出来ませんか?

Q
行をソートすることは出来ませんか?
A

説明追加

秀丸エディタ Ver 5.00から変換モジュールが導入されました。 変換モジュールライブラリに「Sort」があります。 この変換モジュールを導入すれば、秀丸エディタでソートが可能になります。 (変換モジュールはマクロからも使用できます。)

秀丸エディタ Ver 8.00から、ソートは、標準添付の変換モジュールに組み込まれたため、 別途、変換モジュールを追加する必要はありません。 また、TSV/CSV用に、タブ、カンマ区切りに限り、フィールドでソートが可能になってます。 (TSV/CSV用ですが、通常のファイルでも使用可能)

変換モジュールの使い方・設定方法は「秀丸エディタ設定」-「変換モジュールを使うには」 を参照してください。 マクロから変換モジュールを使う方法はマクロから変換モジュールを呼び出す方法を参照してください。

注記追加

Windows(2000、XP)標準のsort.exeは、英文字の大文字・小文字を区別しません。 その為、「sort < con > con」を実行しても、期待する結果にならない場合があります。

説明追加

先頭からではなく、途中からソートしたい場合等は、Windows標準のSortではなく、 UNIX系のSortを使えば可能です。 ( Windows標準のSortでも可能ですが、先頭からの文字数を指定するだけなので、固定長以外では使えない。 UNIX系ソートの場合、フィールドの区切り文字を指定し、フィールドでソートすることも可能。 ) UNIX系のソートは以下のURLから入手可能です。

(sort option < con > con の形式で実行してください。)

テキストファイルの内容

cccc 50
bbbb 200
dddd 100
aaaa 20
eeee 8

先頭からソート

aaaa 20
bbbb 200
cccc 50
dddd 100
eeee 8

第2フィールドでソート

dddd 100
aaaa 20
bbbb 200
cccc 50
eeee 8

第2フィールドで、数値としてソート

eeee 8
aaaa 20
cccc 50
dddd 100
bbbb 200

目次へ

3.1.2 [HME0089A]●IEのソース表示に秀丸を使いたい

Q
Internet Explorerの「表示」−「ソース」でソースを表示すると、通常はメモ帳で表示されますが、 これを秀丸で開くように変更したいのですが?
A

説明追加

Ver.7から「その他」−「動作環境」−「関連付け」で設定を行います。(ブラウザの関連づけ)

上記操作でも変更ができない場合は、「Internet Explorer」にある「開発者ツール」を使用します。 「開発者ツール」は「F12」を押すか、メニューの「ツール」-「「開発者ツール」から起動します。

「開発者ツール」が起動したら、メニューの「ファイル」-「Internet Explorerソース表示のカスタマイズ」-「その他」を 選択する。

[ソース表示のカスタマイズ]

ファイル選択ダイアログが表示されるので、秀丸エディタ(hidemaru.exe)を指定する。

目次へ

3.1.3 [HMEXXXXA]●大文字を小文字に、小文字を大文字に変換したい

新規追加

Q
編集中のファイルにある大文字を小文字に、または小文字を大文字に変換することは出来ますか?
A
編集中のファイルにある、大文字/小文字を変換するには以下の方法があります。
  • 「大文字<->小文字の変換」を使う。

    「大文字<->小文字の変換」はカーソルのある文字だけを対象に、大文字<->小文字変換を行います。

    A→a B→b

    ただし、半角文字しか対応していません。

  • 「編集」メニューの「変換」を使う。

    「変換」メニューにある「UPPER CASE」が大文字変換、「lower case」が小文字変換になります。 変換機能を使うには、変換する文字範囲を、あらかじめ選択しておく必要があります。 「UPPER CASE」、「lower case」共に、半角全角文字を対象に変換を行います。

  • 置換を使う

    置換を方法もありますが、1文字単位でしか出来ません。 (正規表現を使っても。複数文字を同時に置換するのは無理です。)

    Perl等で使用されている「tr/searchlist/replacelist/」のような、リストを使った置換は、 標準では出来ません。(田楽DLL+Bregexp.dllを使って、マクロを組めば可能かもしれない。) それと、エスケープシーケンス(テキスト修飾子)である、\l、\u、\L、\U等も使えません。

    秀丸エディタ Ver.8.13β8より、置換時、検索結果に対し、変換モジュールの機能を実行できるようになりました。 「UPPER CASE」を指定すれば大文字変換、「lower case」を指定すれば小文字変換が可能です。
    置換で、変換モジュールの機能を使う」を参照してください。

目次へ

3.1.4 [HMEXXXXA]●編集しているhtmlファイルをブラウザで開きたい

新規追加

Q
秀丸エディタで編集中のhtmlファイルを、ブラウザで開きたい
A

秀丸エディタのコマンドに「関連付けで開く」というコマンドが、用意されています。 この機能を使えば、編集しているファイルを、関連づけられたアプリケーションで開くことができます。

単純に、関連付け起動を行っているだけなので、ファイルを開いた時の挙動は、アプリケーションに依存します。

たとえば、htmlファイルで実行した場合、編集中のファイルを(保存する必要はあるが)ブラウザで開くことができますが、 同じファイルで、複数回の「関連付けで開く」コマンドを実行した場合、複数のブラウザが開くことになります。 (最初に開いているファイルをリロードすることはない。)

目次へ

3.1.5 [HMEXXXXA]●ファイルを開く場合、最初に開く場所を指定したい

新規追加

Q
ファイルを開く場合、最初に開く場所を指定したい
A

秀丸エディタ Ver.8より、「ファイルを開く」ダイアログの初期状態が指定できます。 ただし、新規作成状態(無題の状態)か、常駐秀丸エディタから「開く」を選択した場合のみ、有効です。 (既存のファイルを開いている場合には、設定は無効になる。)

[ファイル設定画面]

マクロを使う方法もあります。(ファイルを開くときのフォルダ指定を参照)

目次へ

3.1.6 [HMEXXXXA]●ファイルを秀丸エディタで編集したのに、反映されていない

新規追加

Q
ファイルを秀丸エディタで編集したのに、メモ帳など他のアプリケーションで確認しても編集した内容が反映されていない
A

Windowsの「VirtualStore」という機能です。

Windows Vist以降、"C:\Program Files"や、Windowsのシステムフォルダ等、「保護されたフォルダ」に書き込むには、 「管理者権限」が必要です。 Windows XPより前のWindowsでは、そのような制限がなかったため、Windows Vistaに対応していないソフトを使用し、 「保護されたフォルダ」のファイルを書き換えようとしても、エラーになったり、最悪の場合はアプリケーションがクラッシュします。

その為、過去との互換性を重視し、"Windows Vistaに対応していないソフト"で「保護されたフォルダ」のファイルを書き換えた場合、 実際のファイルを書き換えるのではなく、別の場所にファイルを作成し、そのファイルを書き換えるような動作になってます。 つまり、"Windows Vistaに対応していないソフト"側から見ると、「保護されたフォルダ」のファイルを書き換えたように見えるが、 実際は、Windowsがこっそり違う場所にすり替えているという状態です。

読み込み時も同様で、すり替えた場所にファイルが存在すれば、そちらのファイルを開く事になります。 「保護されたフォルダ」のファイルを見た場合、

  • "Windows Vistaに対応していないソフト"は、Windowsがこっそり違う場所にすり替えた場所のファイル
  • "Windows Vistaに対応したソフト"は、実際のファイル

という別のファイルを開く事になるので、表示される内容が違ってしまいます。

秀丸エディタ 32bit版は、初期状態では、"Windows Vistaに対応していないソフト"に分類されていますが、 設定により"Windows Vistaに対応したソフト"に切り替える事が可能です。

動作環境
├32bit版
│└□VirtualStoreを無効にする(再起動が必要)

目次へ

3.2 秀丸マクロについての質問

3.2.1 [HMM0058A]●setactivehidemaru 文の引数

Q
setactivehidemaru 文を使って編集ウィンドウを切り替えたいのですが、使い方がよく分かりません。
A

説明追加

秀丸エディタ Ver5.05以降、パラメータが追加されています。 2番目のパラメタを指定すると、自分自身のウィンドウの重なり位置を調節できます。

3.2.1.1 setactivehidemaruの第二引数の使用例。「次の秀丸エディタ」を、「nexthidemaru」を使わないで行う。

初期状態。アルファベット(a〜d)がウィンドウハンドル(ウィンドウ識別番号)、数字がウィンドウ順番です。

┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃3 ┏━━━━━┻━┓
┃c             ┃
┣━━━━━━━┫
┃2 ┏━━━━━┻━┓
┃b             ┃
┗━┣━━━━━━━┫
    ┃1 ┏━━━━━┻━┓
    ┃a             ┃
    ┗━┣━━━━━━━┫
        ┃0             ┃
        ┗━┫              ┃
            ┃              ┃
            ┗━━━━━━━┛

「次の秀丸エディタ」に切り替えるため、2番目のウィンドウをアクティブにする。(setactivehidemaru 1;) 単純に2番目のウィンドウ(b)が先頭に移動するだけなので、(a)と(b)が入れ替わるだけ。 再度2番目のウィンドウをアクティブにしても、(a)と(b)が入れ替わるだけで、(c)には移動しない。

setactivehidemaru 1;実行時の動作
┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃3 ┏━━━━━┻━┓
┃c             ┃
┣━━━━━━━┫
┃2 ┏━━━━━┻━┓
┃b             ┃
┗━┣━━━━━━━┫
    ┃0             ┣━┓
    ┃              ┃ a┃
    ┗━┫              ┣━┫
        ┃              ┃ 1┃
        ┗━┳━━━━━┛
            ┃              ┃
            ┗━━━━━━━┛

←→
┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃3 ┏━━━━━┻━┓
┃c             ┃
┣━━━━━━━┫
┃2 ┏━━━━━┻━┓
┃b             ┃
┗━┣━━━━━━━┫
    ┃1 ┏━━━━━┻━┓
    ┃a             ┃
    ┗━┣━━━━━━━┫
        ┃0             ┃
        ┗━┫              ┃
            ┃              ┃
            ┗━━━━━━━┛

「次の秀丸エディタ」で順次ウィンドウを切り替えるには、先頭のウィンドウを最後に移動する必要があります。 第二引数を指定し、先頭のウィンドウを最後に移動させる。

setactivehidemaru 1,-1;実行時の動作
┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃2 ┏━━━━━┻━┓
┃c             ┃
┣━━━━━━━┫
┃1             ┃
┏━━━━━┻━┓
┗━┃b             ┃
    ┣━━━━━━━┫
    ┃0             ┣━┓
    ┗━┫              ┃ a┃
        ┃              ┣━┫
        ┃              ┃ 3┃
        ┃              ┃
        ┗━┳━━━━━┛
            ┃              ┃
            ┃              ┃
            ┗━━━━━━━┛

┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃1 ┏━━━━━┻━┓
┃c             ┃
┣━━━━━━━┫
┃0             ┃
┃              ┣━┓
┗━┫              ┃ b┃
    ┃              ┣━┫
    ┃              ┣━┻━┓
    ┗━┳━┳━━━┛     a┃
        ┃3 ┣━━━━━━━┫
        ┃             2┃
        ┃              ┃
        ┗━┫              ┃
            ┃              ┃
            ┃              ┃
            ┗━━━━━━━┛

┏━━━━━━━┓
┃d             ┃
┣━━━━━━━┫
┃0             ┣━┓
┃              ┃ c┃
┃              ┣━┫
┃              ┃ 3┃
┃              ┣━┻━┓
┗━┳━┳━━━┛     b┃
    ┣━━━━━━━┫
    ┃2 ┏━━━━━┻━┓
    ┗━┃             a┃
        ┣━━━━━━━┫
        ┃             1┃
        ┃              ┃
        ┗━┫              ┃
            ┃              ┃
            ┃              ┃
            ┗━━━━━━━┛

目次へ

3.2.2 [HMM0067A]●マクロで引用符を取得するには

Q
秀丸マクロの中で、秀丸で設定されている引用符を文字列として取得したいのですが、 どうすればいいですか?
A

説明追加

現在の秀丸(Windows95以降対応バージョン)では、設定は全てレジストリに保存されています。 iniファイル関連の関数で、"HIDEMARU.INI"にアクセスすると、自動的にレジストリをアクセスするように なっていますが、これは16bit版秀丸との(マクロの)互換性のための動作です。 現状では、レジストリアクセス関数で、レジストリから値を取得する方がいいでしょう。

// (例) 引用符を取得するマクロサンプル ---------------------
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
if(result){
    $inyoufuini = getregstr("RefMark");
    closereg;
    #inyoufuiniLen = strlen($inyoufuini);
    if(#inyoufuiniLen <= 2){
        $inyoufu = "";
    }else{
        $inyoufu = midstr($inyoufuini, 1, #inyoufuiniLen - 2);
    }
    message $inyoufu;
}else{
    message "引用マークの取得に失敗しました。\nマクロを終了します。";
}
endmacro;
// (ここまで)-----------------------------------------------

目次へ

3.2.3 [HMM0076A]●重複行の削除

Q
重複行の削除はできませんか?
A

説明追加

秀丸エディタ Ver 5.00から変換モジュールが導入されました。 変換モジュールライブラリに「uniq」があります。 この変換モジュールを導入すれば、秀丸エディタで重複行の削除が可能になります。 (変換モジュールはマクロからも使用できます。)

変換モジュールの使い方・設定方法は秀丸エディタ設定変換モジュールを使うにはを参照してください。

正規表現を使う方法もあります。

検索文字:(^.+\n)\1
置換文字:\1

連続している行を1行にします。同じ行が複数連続する場合には、複数回実行する必要があります。

目次へ

3.2.4 [HMMXXXXA]●自動起動マクロで複数のマクロを実行したい

新規追加

Q
自動起動マクロでは、一つのマクロしか指定できません。複数のマクロを実行する方法はありませんか?
A

自動起動マクロにはマクロは一つしか指定できません。 複数のマクロを登録するには、ダミーのマクロを用意し、その中で実行したいマクロを指定します。 マクロ実行中に、マクロを実行するには、"execmacro"文を使用します。

//ダミーマクロの例
execmacro "実行したいマクロ名その1";
execmacro "実行したいマクロ名その2";
execmacro "実行したいマクロ名その3";

目次へ

3.2.5 [HMMXXXXA]●マクロ実行すると「DLLがロードされていないのにdllfunc関数が使われました」と表示される

新規追加

Q
マクロ実行すると「DLLがロードされていないのにdllfunc関数が使われました」と表示され、マクロが中断してしまいます。
A

基本的には マクロのバグ(?)で、原因としては 以下の内容が考えられます。

  • loaddll文/関数で、dllの読み込みに失敗しているのに、dllfunc/dllfuncstrを呼び出している
    • DLLの読み込みに失敗する原因としては、DLLが適切な位置に配置されていない等が考えられます。 実行するマクロと同じ場所か、マクロフォルダか、秀丸エディタ本体と同じ場所に配置するかは、 マクロの説明書等に記載されているはずなので、確認してください。
    • マクロとDLLが、同じ場所にあるにも関わらず、動作しない場合は、DLLのロード部分を確認見直してみてください。
  • loaddll文の有効範囲の問題(DLLの有効範囲を参照)
  • 複数DLLを使用していた場合、DLL切替に失敗している

他の人が作ったマクロの場合は、作った人に連絡するようにして下さい。

秀丸エディタ Ver.8.00を使用している場合、マクロにバグが無くても、 「DLLがロードされていないのにdllfunc関数が使われました」 と、表示される場合があります。(loaddll関数の場合を参照)

目次へ

3.2.6 [HMMXXXXA]●通常版で、小数点を含む演算を行う方法

新規追加

Q
通常版で、小数点を含む演算を行う方法はありませんか?
A

浮動小数点演算を行うには、浮動小数点数版(統合版)が必要ですが、WSHを使えば、多少手間がかかりますが、 通常版でも浮動小数点演算が可能です。

"ScriptControl"を使用し、WSHで演算させて、文字列として、取り込みます。

注意:64bit環境では、"ScriptControl"はサポートされていないので、以下のサンプルは動作しません。

  • 64bit OSで、64bit秀丸エディタを使用している場合は動作しません。
  • 64bit OSで、32bit秀丸エディタを使用している場合は動作します。(必要なファイルが入っていれば)
#sc = createobject("ScriptControl");
if(#sc == 0){
    message "オブジェクトの作成(ScriptControl)に失敗しました。";
    endmacro;
}
setpropstr #sc,"Language", "VBScript";
if(!result){
    message "プロパティの設定(Language)に失敗しました。";
    endmacro;
}
$ret1 = callmethod_returnstr(#sc, "Eval","cstr(1.01+0.03)");
if(getresultex(10) == false){
    message "Eval(1)の実行に失敗しました。";
    releaseobject #sc;
    endmacro;
}
message $ret1;
$ret2 = callmethod_returnstr(#sc, "Eval","cstr(1.155-0.03)");
if(getresultex(10) == false){
    message "Eval(2)の実行に失敗しました。";
    releaseobject #sc;
    endmacro;
}
message $ret2;
$ret3 = callmethod_returnstr(#sc, "Eval","cstr(1.155/0.3)");
if(getresultex(10) == false){
    message "Eval(2)の実行に失敗しました。";
    releaseobject #sc;
    endmacro;
}
message $ret3;
releaseobject #sc;
endmacro;

目次へ

4 第II部〜知っていると便利な秀丸の機能

4.1 ●編集位置のマーク及び検索

内容変更

ファイル編集中に、どの行を編集したか知りたい場合は、以下の手順で編集個所を知ることが出来ます。

[手順]

  1. 「その他→動作環境→高度な編集1」にある「編集した行の表示方法」で、「行番号の色を変える」を選択する。
  2. 「その他→ファイルタイプ別の設定→デザイン」にある「編集した行の号番号」で、色などデザインを設定してください。 (ここまでで、編集した行番号が、設定した状態になります)
  3. 「検索→編集マークの上(下)検索」で、編集行に移動することが出来ます。

5 第III部〜秀丸マクロのいろはにほへと

5.1 マクロ内での「\」や特殊文字の使い方

5.1.1 【1】「\」の意味

内容追加

5.2 秀丸マクロで文字列を編集する

5.2.1 【4】範囲選択するには

説明追加

5.2.2 【5】範囲選択を解除するには

注意書き追加

endsel;を実行して選択モードを終了しても、範囲選択状態ままカーソル移動コマンドを使うと、 移動した場所まで範囲選択状態になります。 動作的にはおかしいけど、現状(2004/05/22)においては仕様ということです。

範囲選択した後の操作(コマンド?)で範囲選択が解除されれば問題はないが、 解除されない場合にカーソル移動を行うと思わぬ結果になるので注意。

5.2.3 【6】文字列型変数に取り込むには:その1(gettext文)

内容の訂正と追加

ちなみに、gettext文を実行すると、(gettext文での選択範囲が、秀丸ウィンドウ上で範囲選択されている 範囲と重なっているか否かに関わらず)範囲選択は解除されます。

秀丸エディタVer5.00β5より、gettext(gettext2)文に第5パラメタが追加され、範囲選択を維持することが できるようになりました。(0:範囲選択解除 1:範囲選択保持 省略した場合は0と見なされる。)

秀丸エディタVer5.00β4より、gettext2文が追加されました。gettext文との違いは、columnとlinenoで、 指定を行うところです。

検索系のコマンドと併用する場合、"検索での動作"の設定にかかわらず、マッチした範囲を取り込むには、 seltopx〜selendyキーワードではなく、foundtopx〜foundendyキーワードを使うといいでしょう。

5.3 秀丸ウィンドウの管理

5.3.1 【4】(補足) タブ関連

新規追加

秀丸エディタVer.4.10より、ウィンドウのタブ化が可能になりました。 さらに、Ver.5.00より複数タブウィンドウにも対応しました。

タブモードが有効な場合、通常と同じくopenfile文を使えば、アクティブなタブウィンドウに、 タブとして追加されます。

新規のタブウィンドウとして開く場合は、起動オプション"/i"を指定します。(Ver.5.00以降)

現在のタブウィンドウから、別のタブウィンドウまたは新規タブウィンドウに移動するには、 settabgroup文を使います。

タブ間の移動にはnexttab(次のタブ)、prevtab(前のタブ)を使います。(Ver.5.00以降) Ver.4.00系は、複数タブウィンドウをサポートしていないので、通常の移動命令で切替が可能です。

openfile文で座標指定が可能ですが、タブモードの場合、"/i"オプションを併用する場合、 または、他に秀丸ウィンドウが存在しない場合以外は、 アクティブなタブウィンドウに追加される為、座標指定自体が無効化されます。

タブモード時は、"ウィンドウサイズを自動調整する設定"が無効化されます。

5.3.2 【5】(補足) 常に手前に表示

新規追加

秀丸エディタVer.4.10以降から、"常に手前に表示"が追加されました。 タブモードの場合、"常に手前に表示"してある、タブグループから分離すると、 "常に手前に表示"の設定も引き継がれます。

5.4 マクロ登録数の制限突破大作戦

5.4.1 【2】「エッ! 秀丸ってマクロが80個しか登録できないのっ!?」

内容追加

●作例3

slide_moon氏作成マクロ  Magic Key Ver.0.11 -- 多工程短縮キー

作例2で紹介されている"KEY_ASIN.MAC"の模写マクロである「magickey.mac」と 保守マクロである「magickey_cfg.mac」のセット。 追加機能として、多段階のキーストローク設定が可能。

●作例4

ませま氏作成マクロ  キー割り当て拡張マクロ Ver. 0.03

作例2で紹介されている"KEY_ASIN.MAC"の機能拡張版。 拡張子毎の割り当て変更、多段階のキーストローク設定が可能。 また、200 以上の独自コマンド群(マクロ)がセットになっている。

●作例5

IKKI氏作成マクロ Takoashi

秀丸エディタ ver 8.56 以降で使用可能なマクロです。

等の機能があります。

目次へ

5.5 秀丸エディタVer.6.00 マクロ関連の変更履歴

5.5.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.6.00

5.5.2 【2】仕様変更 - 「秀丸エディタ」Ver.6.00

5.6 秀丸エディタVer.6.50 マクロ関連の変更履歴

5.6.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.6.50

5.6.2 【2】仕様変更 - 「秀丸エディタ」Ver.6.50

5.7 秀丸エディタVer.7.00 マクロ関連の変更履歴

5.7.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.7.00

追加された命令の詳細は、マクロヘルプを参照して下さい。

5.7.2 【2】仕様変更 - 「秀丸エディタ」Ver.7.00

5.8 秀丸エディタVer.8.00 マクロ関連の変更履歴

Ver.8からVer.7からの変更点は、かなり多い為、変更内容については、サイトー企画のページを参照してください。

5.8.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.00

秀まるおのホームページ(サイトー企画)−秀丸エディタの紹介(Ver8.00対応版)(追加コマンド/設定一覧) にある、「マクロ」の項目を参照して下さい。

5.8.2 【2】仕様変更 - 「秀丸エディタ」Ver.8.00

秀まるおのホームページ(サイトー企画)−秀丸エディタの紹介(Ver8.00対応版)(追加コマンド/設定一覧) にある、「マクロ」の「・変更,パラメータ追加」を参照して下さい。

5.9 秀丸エディタVer.8.10 マクロ関連の変更履歴

Ver.8.00からVer.8.10からの変更点として、主なのは、DirectWrite対応です。

5.9.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.10

5.9.2 【2】仕様変更 - 「秀丸エディタ」Ver.8.10

5.10 秀丸エディタVer.8.11 マクロ関連の変更履歴

5.10.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.11

5.10.2 【2】仕様変更 - 「秀丸エディタ」Ver.8.11

5.11 秀丸エディタVer.8.12 マクロ関連の変更履歴

5.11.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.12

5.12 秀丸エディタVer.8.20 マクロ関連の変更履歴

5.12.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.20

5.13 秀丸エディタVer.8.30 マクロ関連の変更履歴

5.13.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.30

5.14 秀丸エディタVer.8.40 マクロ関連の変更履歴

5.14.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.40

5.14.2 【2】仕様変更 - 「秀丸エディタ」Ver.8.40

5.15 秀丸エディタVer.8.50 マクロ関連の変更履歴

5.15.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.50

5.15.2 【2】仕様変更 - 「秀丸エディタ」Ver.8.50

5.16 秀丸エディタVer.8.52 マクロ関連の変更履歴

5.16.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.52

5.17 秀丸エディタVer.8.54 マクロ関連の変更履歴

5.17.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.54

5.18 秀丸エディタVer.8.56 マクロ関連の変更履歴

5.18.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.56

5.19 秀丸エディタVer.8.58 マクロ関連の変更履歴

5.19.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.58

5.20 秀丸エディタVer.8.60 マクロ関連の変更履歴

5.20.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.60

5.21 秀丸エディタVer.8.62 マクロ関連の変更履歴

5.21.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.62

5.22 秀丸エディタVer.8.66 マクロ関連の変更履歴

秀丸エディタ本体の更新内容に関しては、以下になります。

5.22.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.66

5.23 秀丸エディタVer.8.67 マクロ関連の変更履歴

5.23.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.67

5.24 秀丸エディタVer.8.69 マクロ関連の変更履歴

5.24.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.69

5.25 秀丸エディタVer.8.71 マクロ関連の変更履歴

5.25.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.71

5.26 秀丸エディタVer.8.73 マクロ関連の変更履歴

5.26.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.73

5.27 秀丸エディタVer.8.75 マクロ関連の変更履歴

5.27.1 【1】マクロ関連の変更履歴 - 「秀丸エディタ」Ver.8.75

6 第IV部〜テキスト編集を極める!!

6.1 ●正規表現について

6.1.1 【5】 (補足) 秀丸上での複数行にまたがる検索について

説明追加

hmjre.dllは、"$"が、テキストの途中に現れる"\n"にもマッチします。その為、ファイル2にもマッチします。 また、秀丸エディタ Ver.8より、正規表現中に、(?#maxlines:数値)という形式で、 正規表現DLLに渡す行数を指定できます。 (正規表現のコメント形式に基づく指示なので、検索には影響しない。)

6.2 ●タグ付き正規表現とは?

6.2.1 【2】区切り記号の入れ方

説明追加

hmjre.dllでは、タグ付き正規表現はPerlと同じく、括弧「()」を使用します。(V1.69より(秀丸エディタVer5.03以降))

"\f"でのタグ指定は、現状(2015/06/03)でも有効ですが、内部処理的には、かなり面倒なことをやっているので、使わないほうがいいです。 タグ付き正規表現に対応していない「jre32.dll」や「hmjre.dll(V1.69未満)」で、どうしてもタグ付き正規表現を使いたい場合以外は、 "\f"を使うメリットはないです。(検索パターンにもよりますが、最低でも15〜20%程度遅くなる。)

"\f"と、括弧を使ったタグ指定の整合性をとるために、hmjre.dllのタグ指定には、制限があります。 タグ付き正規表現(hmjre.dll 括弧での指定)を参照。

また、"\f"を使った場合、検索文字列内でのタグ参照はできません。

例)検索文字列: ..\f-\0

正規表現が有効で、検索に"\f"が含まれる場合、タグの処理は秀丸エディタ本体が行います。 検索に"\f"が含まれない場合、括弧によるタグの処理は、正規表現DLLで行われます。 "\f"と括弧が混在するタグ指定は出来ません。 混在した場合は、秀丸エディタ本体で"\f"を処理する都合上、"\f"が優先され、括弧は無視されます。

7 正規表現関連

7.1 正規表現エンジン

2013/09/16 正規表現スピードチェック実行結果を追加

64bit対応について

マクロ用DLLと異なり、正規表現エンジンは、使用する秀丸エディタと同じbitのDLLしか使えません。

  • 64bit 秀丸エディタの場合、正規表現DLLは、64bitのDLLしか使用できない
  • 32bit 秀丸エディタの場合、正規表現DLLは、32bitのDLLしか使用できない

64bit対応しているのは、hmjre.dll、hmonig.dllです。 JRE32.DLL、BRegIf.dllの64bit版はありません。

7.1.1 hmjre.dll

秀丸エディタの正規表現エンジンは、JRE32.DLLからhmjre.dllに変更になっています。 hmjre.dllはJRE32.DLLに対して、以下の拡張が行われています。

hmjre.dllのVer.3.00以降、さらに拡張が進み、

以上の機能が、追加されています。 詳細は、hmjre.dllのヘルプを参照してください。

7.1.2 BRegIf.dll+BREGEXP.DLL

BREGEXP.DLLを使うことにより、Perl互換(1996/05/25辺りのPerl5)の正規表現が使えます。 使用するにはBRegIf.dllが必要です。

hmjre.dllに比べ、使用できる正規表現は増えますが、以下の制限があります。

2007/09/16に公開されたバージョン(BRegIf.dll v0,0,2,2)では、K.Takata氏の修正が取り込まれ、 括弧を使用した場合でも、置換で"\1"によるタグ参照が可能です。 "bregonig.dll"を認識し、"bregonig.dll"-->"BREGEXP.DLL"の順番でDLLのロードを試みます。 明示的に"BREGEXP.DLL"を使用したい場合は、"bregonig.dll"をリネームするか、削除しておく必要があります。

7.1.3 BRegIf.dll+bregonig.dll

bregonig.dllを使うことにより、鬼車の正規表現が使えます。 (使用できる正規表現や、制限事項等は、bregonig.dllのドキュメントを参照) 使用するにはBRegIf.dll(v0,0,2,2)が必要です。

BRegIf.dll+BREGEXP.DLLと同じ制限があります。

bregonig.dllのインターフェースが、"BREGEXP.DLL"と同じであることを利用して、動作させています。

"bregonig.dll"-->"BREGEXP.DLL"の順番でDLLのロードを試みます。 あまりないとは思いますが、"bregonig.dll"のロードに失敗した場合、"BREGEXP.DLL"が使用されることになります。 "bregonig.dll"を使用する場合は、"BREGEXP.DLL"を削除、またはリネームしておいた方がいいかもしれません。

"bregonig.dll"のバージョンが1.41未満の場合、BRegIf.dllの独自拡張機能である、";1"によるサブパターン指定が、 正常に動作しません。サブパターン選択を使用する場合は、Version.1.41以降が必要です。

bregonig.dllは、Unicode対応版のVer.2.00以降がありますが、BRegIf.dllからは、Unicode対応のAPIは呼び出していません。 その為、Ver.2.00以降を使用しても、動作はANSI/Shift_JIS 専用版と同じです。

7.1.4 hmonig.dll

hmonig.dllを使うことにより、鬼車の正規表現が使えます。 Ver.0.5.9.0以降では、 鬼雲(Onigmo (Oniguruma-mod) ) の正規表現が使えます。 (使用できる正規表現や、制限事項等は、hmonig.dllのドキュメントを参照)

以下の制限があります。

7.1.5 正規表現スピードチェック実行結果

hmjre.dll Ver.4系の動作検証用マクロ(秀まるお氏作成)を、ちょっと改造したマクロの実行結果です。

以下のDLLをロードし、実行しています。

実行したマクロ実行結果(2013/09/16更新)

結果が「-1」なのは、チェックをスキップした場合です。

測定結果10回分の平均値です。

結果 HmJreV4 HmJreV3 hmonig(UNICODE)#2 hmonig(SJIS) hmonig(UNICODE) bregif.dll
No.001 65.3 617.8 23.5 -1 -1 -1
No.002 237.1 216920 43.6 34.3 45.1 40.8
No.003 5885.4 9.6 20.4 9.4 18.6 15.9
No.004 35.8 10.9 15.6 13.9 17.2 10.7
No.005 30026.8 4711.5 14.1 10.9 17.3 15.8
No.006 572.6 4857.6 14.2 15.4 15.4 14.2
No.007 14.1 49.7 15.6 478.8 639.7 500.6
No.008 107.7 189155 45.4 -1 -1 -1
No.009 60.8 126.3 4918.8 3708.1 4427.4 3865.3
No.010 23.4 12.5 23.4 20.3 31.4 28.1
No.011 962.3 162.3 144.8 99.7 146.7 -1
No.012 20.2 145.2 91.7 71.7 95.2 95.2
No.013 17 168.5 34.3 20.3 40.6 20
No.014 15.7 5799.5 -1 -1 -1 -1
No.015 14.1 15.4 31.2 20.3 29.8 29.7
No.016 109.1 19585.9 24.9 18.7 26.6 23.4
No.017 31.1 28.1 -1 -1 -1 -1
No.018 32.7 53.2 -1 -1 -1 -1
No.019 11.1 32.8 274.6 165.4 288.4 156
No.020 10.6 412 248.1 168.4 254.1 171.5
No.021 48.3 15117 781.5 636.4 1168.5 475.9
No.022 48.3 15123.5 748.8 602.1 617.8 493.2
No.023 55.9 9.6 20.4 9.4 18.6 15.9
No.024 73.3 4.6 17.2 13.9 17.1 15.7
No.025 13489.6 12.6 17 14.1 17.1 15.4

7.2 正規表現メモ

秀丸エディタにおけるタグ付き正規表現の上限を修正

7.2.1 否定文字クラス

一致して欲しくない文字の集合。指定された文字に一致しない文字にマッチする。 "\n"も含め、"一致しない文字"全てにマッチします。 ("."と違い、"\n"を含めたくない場合は、明示的に指定する必要あり。)

DLLのページにある、ファイルパスの分割で、 ファイル名を分割するのに、否定クラス([^\\]+)を使用しているが、対象文字列を、

$name = "C:\\Program Files\\Hidemaru\\hidemaru.exe\n";
                                                  ====追加

にすると、最後のファイ名の所で、改行文字までマッチします。 否定クラスを使う場合、意図しない箇所までマッチする事があるので、 注意が必要です。

7.2.2 タグ付き正規表現(hmjre.dll 括弧での指定)

一般的(?)な正規表現と違い、ネストした括弧に対応していないので注意。 一番浅い括弧をタグと認識する。

aa(bbb(ccc)dddd)(eeeee)
   ============  =====
        \1         \2
(ccc)はタグと認識しない。

7.2.3 後方一致指定と後方不一致指定

肯定先読み、否定先読みとも呼ばれています。 "^"や"$"と同じアンカーで位置にマッチする。 単独で指定した場合は、"文字"にマッチしないので、「検索文字列の強調表示」しても強調表示されない。

後方一致/肯定先読み、後方不一致/否定先読み が、チェック開始位置を動かさない為、以下の様な書き方をした場合、 両方の条件を満たす場合のみ、マッチするような動作になります。

(?!000)[0-9]{3} ==> "000"ではない3桁の数
(?=000)[0-9]{3} ==> "000"に一致する、3桁の数字

7.2.4 前方一致指定と前方不一致指定

肯定後読み、否定後読みとも呼ばれています。 "^"や"$"と同じアンカーで位置にマッチする。 単独で指定した場合は、"文字"にマッチしないので、「検索文字列の強調表示」しても強調表示されない。

(?<=A) ==> "A"の最後(末尾)にマッチする。

"後読み"と言われているように、最後にマッチ判定を行います。

(<=aaa)(bbb)ccc(ddd) ==> (bbb)ccc(ddd)にマッチする箇所を探してから、
                         (<=aaa)にマッチするか判定する。

使用するDLLによって、制限があるので注意すること。

7.2.5 grepで条件に一致しない行を列挙する

秀丸エディタVer.8より、grepに「ヒットしない行」というオプションが追加され、 秀丸エディタの機能で、条件に一致しない行を列挙可能になっています。

BRegIf.dllはBREGEXP.DLLへの仲介を行うだけでなく、独自の拡張が行われて、 パターンの否定が出来ます。(詳細は添付されているテキストファイルを参照)

hmjre.dllの場合は、後方不一致指定を使えば可能。

^((?!一致しない文字列).)+$

参考サイト:正規表現パズル

一致しない条件が一文字または、どれか1文字という場合は、

^[^a]+$

という、否定クラスを使う方法もあります。

以下の正規表現は、"ab"を含まないという表現にはならないので、注意すること。

^([^a][^b])+$

7.2.6 \wの違い

\wは一般的に、単語構成文字([a-zA-Z_0-9])のクラス略記法ですが、使用するDLLによって、 扱いが異なります。(正規表現は処理系毎に、微妙に異なることが多い事と、多言語対応による。)

7.2.6.1 hmjre.dll 

JRE32.DLLと同様のため、[a-zA-Z_]+ になります。 数字が含まれない事と、文字ではなく、文字列にヒットします。

7.2.6.3 BRegIf.dll + bregonig.dll、hmonig.dll(Ver.0.50未満)

[a-zA-Z_0-9]+2バイト文字の範囲(漢字、カタカナ、ひらがな) になります。 (使用するロケールに従い、単語構成文字にマッチする。) 日本語の文章を、「\w+」で検索すると、ほぼ全ての文字にマッチします。 その為、「\b」(単語境界)も影響を受けます。

7.2.7 Shift_JIS範囲外の文字(漢字)について

2015/06/08現在、正規表現検索でShift_JIS範囲外の文字を正常に扱えるのは、hmjre.dll、hmonig.dll(Ver.5.0以降)だけです。 他のDLL(BRegIf.dll(BREGEXP.DLL、bregonig.dll)、hmonig.dll(Ver.5.0未満)、JRE32.DLL)は、基本的にShift_JIS専用で、 Unicodeには対応していません。

検索が行われない訳ではありませんが、

等は、正常な結果を返さない場合があります。

bregonig.dllは、Unicode対応版のVer.2.00以降がありますが、BRegIf.dllからは、Unicode対応のAPIは呼び出していません。 その為、動作はVer.1系(ANSI/Shift_JIS 専用版)と同じです。(Ver.2.00以降を使用しても、Ver.1系と同じ動作になる)

7.2.8 秀丸エディタにおけるタグ付き正規表現の上限

秀丸エディタで使用できるタグの上限は、hmjre.dllの仕様から9までとなります。

BRegIf.dll + bregonig.dll、hmonig.dll自体は、10以上も指定可能ですが、 秀丸エディタ側から10以上を取得できないので、実質10以上は、使用できません。

正確には、検索時に後方参照で使用する場合は、DLL内の処理で済むため、10以上も使用可能です。 置換は、秀丸エディタ側で処理を行うため、10以上は使用できません。

秀丸エディタVer.8.58β1(HmJre.dll V4.13)より、15まで指定可能になりました。

\g{数字}

という指定方法になります。

目次へ


top秀丸エディタマクロ