= 文字列探索

        {FINd | IFInd | EXClude | IX | FNX | INX}
                  [!] {探索文字列 | * | *e | *ec | *g | *L | *=Mn | *u | *=[n] | \esc | P'pics'}
                     [探索位置] [& [!] 探索文字列2 [探索位置2] [-d[<|>]n]
                     [-g]
                     [U[B|L|8|4]]
                     [all | next | + | prev | - | first | last]
                     [-a[-]n] [-b[-]n] [-c[{L|R}m][{T|B}n]] [-j|-je]
                     [-Llcmd] -m[n] [-nx] [.lab1 .lab2]

            探索位置:[l-column | LM | RM [r-column] | eol | maxeol]

            FIN     :大文字/小文字 区別有
            IFI     :大文字/小文字 区別無(case Insensitive)
            EXC     :Find後その行を非表示化
            IX      :IFind後その行を非表示化
            FNX     :非表示行を除くFINd.
            INX     :非表示行を除くIFInd.

            !       :探索文字を含まない行を探索。
            探索文字列:スペースを含む場合や以下に示す特殊用途の
                       文字列自身を探索する場合は引用府を使用して下さい
                       例えば "F '.exe'", "F 'set up'".
                       全行非表示化する時は省略可能("EXC all"でOK)
                       行末に限定する時は "F word\n"の様に\nを付ける。
                       F "a b"\n ではなく F "a b" eol としてください。
                       行末を探すときは "F *\n"とする。
                       行末の "*" を探すときは F "*"\nとする。
            &       :2つの文字列を含む行の探索。例えば word1 & word2。
            *       :直前の探索コマンドと同じ文字列を探索
                     探索方向を変えて再探索する時等に使います
                     例えば  f * prev.
                     探索範囲は前のは継承されません.
                     &(AND)探索の第二探索文字においてはこの意味を持ちません。
            *u      :更新行を探索します
            *e      :エラー行を探索します
                     シフトエラー,行コマンドエラーなど.
                     行に適当にラベルをつけて目印とし "f *e" で探すことが出来ます。
            *ec     : CPU8 で開いた時の変換エラー文字位置を探します
                      変換エラー行は 更新でエラーがリセットするまでの間は *e で探せます。
            *g      :現表示画面上でGREp コマンドで選択された行を探索。
                     -g オプションサポートで GREpコマンドを編集画面で現在表示しているファイルに
                     使用することはないと思いますが使用は可能です。
            *L      :行コマンド "="で比較した結果の一致行(! と組み合わせれば
                     不一致行)、TCコマンドの "=="によるフィールド比較の
                     不一致行を探すときに使用できる。
                      例) "=" 行コマンドで比較した後
                            "x *l all; del x all" で 一致行を全て削除する
            *=[n]   :同じ内容の行がn+1行以上続く個所を探索する。
                     比較桁も指定可能。nの省略値は1。
                     例えば、"x *= all" の後 "drop x all"とすれば重複の多い
                     ファイルのファイルサイズを縮小できる。
                     "x *="コマンドでは最初の1行だけ表示のまま残すが
                     これも非表示にするときは /b0 を指定する。
                     -aでマイナスを指定すると下方の行も残すことができる。
                     例えば -a-1 は 1行目と下から1行を残して間を非表示化。
            *=Mn    :画面分割で開いた2つのファイルで照合する。
                     (コマンド入力画面のファイルのキーが別の画面のファイル
                     にあるか調べる)。
                     n:第二画面の照合キーカラム。
                     現画面のキーは探索範囲桁位置パラメータで指定する。
                     一度でも照合した第2画面の行はエラー表示
                     行番号欄が反転,"f *e"で探せる。
                      例)"f *=M6 10 18; del x all"
                          現画面のカラム10-18が第二画面のいずれかの行のカラム6-14に
                          一致する行を探す。
                          "x"と"del"でマッチングした行を全て削除する
           \esc    :次の1文字エスケープシーケンスとヘキサ指定が可能.
                     \a (ベル=0x07),\b (後退=0x08),\t (水平タブ=0x09)
                     \n (改行=0x0a),\v (垂直タブ=0x0b), (改頁=0x0c)
                     \r (復帰=0x0d),\x(偶数桁のヘキサ文字列)
                     ヘキサ指定の例. \x8281 ,  \x09 , \x0c ,
                     但し ファイル読み込み時に行区切り文字として取り
                     扱われた \x0d0a や \n は見つかりません.
                     \aX などと他の文字と一緒には使えません.
                     またテキストファイルではタブ(\x09)はー\x0920などと
                     他の文字と一緒には出来ません.
                     IFIndでもFINd(大文字/小文字 区別有)と扱われます。
                     Esc解釈をさせたくない場合は "\t" 等と引用符を使用。

               (注)  UTF8ファイルでは \x__指定の場合文字境界を意識します
                     \x 指定は探索文字列も置換文字列も4桁の倍数です。
                     \xaabbのaaは u-xxyy の yyとはマッチしません。xxとのみマッチします。
                     例) c \x30003000 \x20202020
 
            P'pics' :picsに以下の1文字対応の文字クラス指定文字を指定します
                     クラス指定文字以外はその文字で探索します。
                     IFIndコマンドでは大文字小文字指定をしても区別されません
                     タブ(0x09)はスペースとマッチします。(タブ拡張後に探索)

                     文字クラス指定文字。
                       =  全ての文字とマッチ。
                       .  非表示文字(正規表現で[^[:cntrl:]], 0x00-0x1f,0x7f,0x80但し0x09は除く)
                       @  アルファベット     ( [[:alpha:]]  )
                       -  非数字             ( [^[:digit:]] )
                       #  数字               ( [[:digit:]]  )
                       <  英小文字           ( [[:lower:]]  )
                       $  特殊文字           ( [[:punct:]]  )
                       >  英大文字           ( [[:upper:]]  )
                       ^  非ブランク(EBCDIC の ¬ の代わりに ^ を割り当て)
                          (ISO Latin1の 0xacもOK)
                                             ( [^[:space:]] )

                     例) P'z.@#'
                         スペース,カンマ、セミコロンを含む場合は "P'ABC== ###'" のように全体を 引用符 で囲んでください。
                         文字クラス指定文字自身を探す時は P'ABC\=\=##\.##\\' のように "\"でエスケープしてください。

            -g      :探索文字列が正規表現形式であることを指示。(grep 探索)
                     "&" 指定の時(両方が正規表現形式である必要はないですが)、
                     探索文字列2も正規表現とみなします。
                     タブ(0x09)はスペースとマッチします。(タブ拡張後に探索)
                     例) f abcd|efg -g   で 次の "abcd" か "efg" を探索。
                (注) UTF8ファイルでは内部的なデータ表現上から正しく機能しない可能性があります
                     承知の上使用してください
                     行がASCII 文字列のみなら問題ないでしょう。

                     APIはGNU(re_compile_pattern,re_search)を使用し以下のオプションを指定しています。
                     (Windows版はGNU regex v2.7をポーティングしました)

                       RE_BACKSLASH_ESCAPE_IN_LISTS :off: [ ] 内の \ はそのまま \
                       RE_BK_PLUS_QM                :off: 繰り返しは \+, \*  ではなく +, * をそのまま指定
                       RE_CHAR_CLASSES              :on : [:alpha:]などのクラス指定を使用する。
                       RE_CONTEXT_INDEP_ANCHORS     :off: ^, $ (アンカー)は適切な位置にあるときのみ意味を持たせる。
                       RE_CONTEXT_INDEP_OPS         :off: +, * は適切な位置にあるときのみその意味を持たせる。
                       RE_CONTEXT_INVALID_OPS       :off: +, * は適切な値にない時は通常文字の扱い。
                       RE_DOT_NEWLINE               :on : . は改行文字ともマッチさせる。
                       RE_DOT_NOT_NULL              :off: . は塗る文字ともマッチさせる。
                       RE_HAT_LISTS_NOT_NEWLINE     :on : [^...] のような指定は改行文字とマッチさせない。
                       RE_INTERVALS                 :on : 間隔指定({ と })を使用する。
                       RE_LIMITED_OPS               :off: +, *, | を使用する
                       RE_NEWLINE_ALT               :off: 改行文字は通常文字と同じ扱い。
                       RE_NO_BK_BRACES              :on : 間隔指定は \{, \} ではなく {, } をそのまま指定。
                       RE_NO_BK_PARENS              :on : サブグループ指定は \(, \) ではなく (, ) をそのまま指定。
                       RE_NO_BK_REFS                :on : \1 などの後方参照は使用しない。
                       RE_NO_BK_VBAR                :on : Alternation(OR) は \| ではなく | をそのまま使用。
                       RE_NO_EMPTY_RANGES           :on : [ ]内で a-b 形式が逆順のときエラーとする。
                       RE_UNMATCHED_RIGHT_PAREN_ORD :on : ( ) がペアをなしていない時通常文字として扱う。

                       IFIndコマンドではRE_ICASE(大文字小文字区別無し)を指定。
#ifdef UTF8SUPP_XE

            U[B|L|8|4]:UCS2/UTF8コードを探索
                     U   : オプションプレフィックス。
                     B/L : BigEndian/LittleEndian UCS2探索。省略値はOSに従う(Intel系は"L")。
                           例えば 0x'003100320033' を探す時 "F 123 UB"、
                                  0x'310032003300' を探す時 "F 123 UL" とする。
                     8   : UTF8 コードで探します。
                           コマンド行の入力は A+u キーでどちらのコードでも入力できます。
                           すなわち、コマンド行が "=u=>" で表示されていればUTF8、
                           そうでなければロケールコード入力状態です。
                           ロケールコード入力状態で U8を指定すればUTF8コードで探します。
                           UTF8ファイルが無変換で開かれている時などに使用します。
                             例.  F xx  U8
                             ここで xx は ロケールコード、例えばその値が 0xa0 とすると
                             0xa0 の UTF8 コード値 0xc2a0 を探します。
                     4   : FINd コマンドで探索文字列がUCS4 Hexコードであることの指定。
                           &(AND)サーチの場合はそれぞれのオペランドに指定すること
                             (例) f Micro U4 UL & Vender U4 UL
                          CHAnge コマンドで置換文字列がUCS4 Hexコードであることの指定。
                             例.  C abc  \x10fffd   u4
                           U4を指定しない場合はUTF8ファイル上の置換はUCS2指定とみなします(2の倍数桁)
                             例.  C abc  \x30203021

#endif

            all     :ファイル全体を探索
            allkx   :KeepX。ファイル全体を探索。
                     見つかった行が非表示行でも表示行にしない。
            next    :カ−ソル位置より下を探索,これが省略値
            +       :nextと同じ
            prev    :カ−ソル位置より上を探索
            -       :prevと同じ
            first   :ファイルの最初から探索,見つかった所にカーソルを移動
            last    :ファイルの最後から探索,見つかった所にカーソルを移動
            .lab1/2 :行番号欄に設定したラベルを対で指定して探索行範囲を
                     限定する.行番号を使用しての範囲指定も可.
            l-column:探索範囲の左端桁位置.
            r-column:探索範囲の右端桁位置.
            LM      :探索範囲を左マージンに限定
            RM      :探索範囲を右マージンに限定
            eol     :行末のみ探す。
                     探索文字がスペースを含むときに使用する。
                     ("a b"\n はエラーとなる)
            maxeol  :最長行(複数行ありうる)の行末のみ探す。
            -a[-]   :探索文字列を含む行の後n行を表示化/非表示化する。
                     & 探索の時は 2 番目の文字列を含む行を基準とする。
                     "-"は前のn行を意味する, このとき -b を指定し
                     &探索なら間の行数も加え合計が正でなければならない。
            -b[-]   :探索文字列を含む行の前n行を表示化/非表示化する。
                     & 探索の時は 1 番目の文字列を含む行を基準とする。
                     "-"は前のn行を意味する, このとき -a を指定し
                     &探索なら間の行数も加え合計が正でなければならない。
            -c[{L|R}m][{T|B}n]
                     左(L)からあるいは右(R)からm桁目、上(T)からあるいは
                     下(B)からn行目に探索文字列が表示されるように
                     画面スクロールする。
                     -cのみは -cR の意味。
                     省略値は現在の表示画面にあるときはスクロルしない、
                     ない時は行が中央に来るようにスクロールする。
            -d[<|>]n:& のとき2つの文字列の間隔を指定する。n は行数。
                     -dn:ちょうどn行目に第二文字列がある。
                     -d>n:n+1行以上離れている。
                     -d<n:n-1行以内にある。
                     -dの指定が無い時は -d0即ち同一行にあるとなる。
            -j      :-a/-b パラメータの範囲、或いは -d 指定の&(and)探索で
                     見つかった 2ワード間の行を連結する。
            -je     :& 探索で第1文字列があり第2文字列が見つからない時
                     第1文字列行から最終行までを連結する。
                     例えば "i StartID & StratID -d>1 -a-1 -j
                     だと最後に非連結行が残るが -j を -je にすれば全て
                     連結される。
            -Llcmd  :見つかった行の行番号欄に指定の文字列をセットする。
                     例えば "f StartLineID -Lcc;f EndLineID -Lcc;
                     rep partialfile" とすると StartLineID と EndLineID
                     の間をpartialfileに複写する。
                     カーソル移動が省略できるので EXE コマンドファイル内
                     での使用が考えられる。
            -m[n]   :反転表示を継続する。
                     前のFindコマンドの探索文字反転表示をリセットせずに
                     今回のコマンドの探索文字を追加反転表示する。
                     次の再探索(PF5)のときも反転表示が継続される。
                     "n"指定があると次のRFind(PF5)コマンドからそうする。
            -nx     :非表示行は対象外。(INX/FNXに同じ)

            -同じ語の再探索/反転再探索は機能キー(F5/Shift+F5)を使用.
             見つからずにファイルの最後/最初に達した後続いて同じ機能キーを
             押せばファイルの最初/最後に戻って再探索します.
            -オペランド値のみをコマンド行に入力し再探索/反転再探索の
             機能キー(F5/Shift+F5)を押せば それぞれ 大文字/小文字区別無の
             next/prev 探索となる.コマンド動詞(省略形のみ認める)から入力
             して機能キーを押した場合は大文字/小文字区別はそのコマンド動詞
             に従います
            -タブとそのタブによるスペースは空白文字と一致すると見なされます
            -探索文字列の指定のしかたについては,先の"語について"の記述を
             参照