単語補完の単語の種類:カスタムについてNo.09308
K'zawa さん 17/01/31 11:44
 
こんにちは、K'zawaです。

単語補完で、単語の種類をカスタムにしたとき、

単語の先頭文字: (空欄)
単語の途中の文字: #
単語の終了文字: (空欄)

ならば、単語を正規表現で表すと、

[a-zA-Z_][a-zA-Z0-9_#]*
[a-zA-Z_][a-zA-Z0-9_#]*|[a-zA-Z0-9_#]+

のどちらでしょうか?
この設定で#が単語の先頭になりうるかということです。

[ ]
RE:09308 単語補完の単語の種類:カスタムNo.09309
秀丸担当 さん 17/01/31 13:22
 

単語の種類がカスタムのときの「単語の途中の文字」は、基本的には単語の先頭
には含まれないです。
0〜9と同じように、先頭に含まれないようになり、例えば「100f」を単語とみな
さないように、「#f」も単語とみなさないようになります。

ただ、ちょっとややこしいのですが、手動で単語補完の一覧を出すとき、「手動
でのさらなる補完」の「記号」によって記号を含んで単語の一覧を出す場合があ
ります。
 

[ ]
RE:09309 単語補完の単語の種類:カスタムNo.09310
K'zawa さん 17/01/31 14:34
 
秀丸担当さん、こんにちは。
K'zawaです。

>単語の種類がカスタムのときの「単語の途中の文字」は、基本的には単語の先頭
>には含まれないです。
>0〜9と同じように、先頭に含まれないようになり、例えば「100f」を単語とみな
>さないように、「#f」も単語とみなさないようになります。

ご説明ありがとうございます。

>ただ、ちょっとややこしいのですが、手動で単語補完の一覧を出すとき、「手動
>でのさらなる補完」の「記号」によって記号を含んで単語の一覧を出す場合があ
>ります。

これは、ヘルプにあるような、

> カーソル位置の文字が単語にマッチしない場合、カーソル位置にある記号1文字を
>取り込んで検索し、候補を出します。

とは違う「カスタム」のときの独自の処理が働くということでしょうか?

[ ]
RE:09310 単語補完の単語の種類:カスタムNo.09311
秀丸担当 さん 17/01/31 16:01
 

カスタムは「記号」のとき独自の処理になるということはないはずで、カスタム
の「単語の途中の文字」に追加したものは、通常の単語の場合の0〜9と同じ振る
舞いになると考えてもらえばいいと思います。
例えば#を0に置き換えれば、「標準(一般的な単語)」と同じということになると
思います。

「カスタム」で以下のテキストがあったとします。
#xxx
#x

「標準(一般的な単語)」で以下のテキストがあったとします。
0xxx
0x

それぞれの2行目での候補が出かたは、「カスタム」と「標準(一般的な単語)」
は同じということになります。


「手動でのさらなる補完」のときの「記号」はカーソル位置にある記号一文字の
ことのはずでしたが、調べてみたら、それだけではありませんでした。
上記の例の2行目で、手動で「記号」がONのとき、「0xxx」も候補に出ていまし
た。
これは、手動であれば「単語の途中の文字」が先頭にあってもいいということを
意味していました。
動作が違うかヘルプが違うかということになりますが、いろいろ複雑になってい
て動作を変更するのは難しそうです。
動作はそのままで、オプション名やヘルプを適切に変更したいと思います。

[ ]
RE:09311 単語補完の単語の種類:カスタムNo.09312
K'zawa さん 17/01/31 20:27
 
秀丸担当さん、こんにちは。
K'zawaです。

独自の処理と表現したのは、「記号」設定のほうで、1文字に限らずそれ以上取
得しているように思えたからでした。例えばカーソル位置に「##」とタイプした
場合、「#」ではなく「##」で補完されます。

これに対し、

AutocompFlag1: 0x0001
AutocompFlag2: 0x4f00
単語の先頭文字: #$
単語の途中の文字: #$
単語の終了文字: (空欄)

という設定の場合です。
こんどは単語の先頭が記号でもいいことになります。
「##」とタイプして補完すると「#」だけで補完しているように見えます。
「##a」とタイプして補完すると「#a」だけで補完しているように見えます。

[ ]
RE:09312 単語補完の単語の種類:カスタムNo.09313
秀丸担当 さん 17/02/01 10:03
 

>AutocompFlag1: 0x0001
>AutocompFlag2: 0x4f00
>単語の先頭文字: #$
>単語の途中の文字: #$
>単語の終了文字: (空欄)

なるほど、確かにこの場合はおかしいと思います。
この場合は「##a」の入力で「#a」だけで補完されるべきではなく、「##a」とし
て補完されるべきで、この動作はバグと言っていいと思います。
次のβ版で修正させていただきます。

[ ]
RE:09313 単語補完の単語の種類:カスタムNo.09314
K'zawa さん 17/02/01 21:33
 
秀丸担当さん、こんにちは。
K'zawaです。

>なるほど、確かにこの場合はおかしいと思います。
>この場合は「##a」の入力で「#a」だけで補完されるべきではなく、「##a」とし
>て補完されるべきで、この動作はバグと言っていいと思います。
>次のβ版で修正させていただきます。

よろしくお願いします。

もうひとつ質問なのですが、現在の秀丸と直前の秀丸とで、ファイルタイプが異
なる場合、または同じファイルタイプでも現在の秀丸が一時的な設定になってい
る場合、辞書「直前の秀丸エディタ」では、単語の種類等は直前の秀丸側の設定
が適用されるのでしょうか?
開いているファイルの内容が同じでも、候補にあがるものが異なっています。

[ ]
RE:09314 単語補完の単語の種類:カスタムNo.09315
秀丸担当 さん 17/02/02 10:25
 

直前の秀丸エディタの場合、単語の種類についてはファイルタイプ別の設定が違
う場合は、単語の種類も違うままになっていました。
もし必要であれば、現在の秀丸エディタに合わせるように検討します。
現状では食い違うことになってしまうので、単語の種類は同じにしておいたほう
がいいと思います。

[ ]
RE:09315 単語補完の単語の種類:カスタムNo.09318
K'zawa さん 17/02/02 20:59
 
秀丸担当さん、こんにちは。
K'zawaです。

>直前の秀丸エディタの場合、単語の種類についてはファイルタイプ別の設定が違
>う場合は、単語の種類も違うままになっていました。
>もし必要であれば、現在の秀丸エディタに合わせるように検討します。

辞書がなんであれ、編集しているのは現在の秀丸のほうなので、標準は現在の秀
丸の設定のほうがいいような気がします。

-

beta13にて、単語の区切り位置の違いだと思うのですが、下記の違いがあります。

ファイル内容
#abc1
##abc2
###abc3
a#abc


AutocompFlag1: 0x0001
AutocompFlag2: 0x4f00
単語の先頭文字: #$
単語の途中の文字: #$
単語の終了文字: (空欄)

入力: #a

候補
#abc
#abc3
#abc2
#abc1


単語の先頭文字: (空欄)
に変更

候補
#abc1

[ ]
RE:09318 単語補完の単語の種類:カスタムNo.09319
秀丸担当 さん 17/02/03 12:10
 

単語の種類を直前の秀丸エディタにも適用させることは、今後のバージョンで検
討したいと思います。

>beta13にて、単語の区切り位置の違いだと思うのですが、下記の違いがあります。

「#a」の直後にカーソルがあって単語補完コマンドを実行したとき、ではなく、
「#a」を範囲選択し、単語補完コマンドを実行したとき、の動作のことかと思い
ます。
そうだとして、この動作は以前と同じだと思います。

β13での修正は、「#a」の直後にカーソルがあって単語補完コマンドを実行した
とき、どこまでを元の情報として取り込むかどうかを修正しました。
「#a」の直後の場合はどのみち違いは無いですが、「##a」の直後の場合に今回
の修正の影響があります。

範囲選択されている場合は、既に「#a」は元の情報として強制的に取り込まれて
いるので、β13の修正は関係ないです。

以前から違いがある点を調べてみたところでは、「単語の先頭文字: (空欄)」で、
入力が「#a」で、対象テキストが「##abc2」の場合、「#a」は単語の途中にある
と判断されて、候補は出さないようになっていました。

[ ]
RE:09319 単語補完の単語の種類:カスタムNo.09320
K'zawa さん 17/02/03 20:39
 
秀丸担当さん、こんにちは。
K'zawaです。

>単語の種類を直前の秀丸エディタにも適用させることは、今後のバージョンで検
>討したいと思います。

よろしくお願いします。

>「#a」の直後にカーソルがあって単語補完コマンドを実行したとき、ではなく、
>「#a」を範囲選択し、単語補完コマンドを実行したとき、の動作のことかと思い
>ます。
>そうだとして、この動作は以前と同じだと思います。

範囲選択はしていません。

入力が「xa」で、対象テキストが「xxabc2」の場合、「xabc2」は候補にならな
いですよね?

単語の先頭文字: #$
単語の途中の文字: #$
入力が「#a」で、対象テキストが「##abc2」の場合、「#abc2」が候補にあがる
のは上と違うと思うのですが、別物なんでしょうか?

[ ]
RE:09320 単語補完の単語の種類:カスタムNo.09321
秀丸担当 さん 17/02/06 12:51
 

確かにそうなることが確認できました。

単語の先頭文字: #$
単語の途中の文字: #$
この場合はアルファベットのときと同じではなく、候補を拾うときは追加された
先頭文字が出たときに、それをすぐに先頭とみなすようになっていました。
β13からではなく、この動作は以前と同じになっています。

こういった一連の挙動は、例えばHTMLで「abc<def」のとき、「<」を先頭とする
ためにありました。

先頭と途中に両方同じものを定義する場合は、アルファベットのときと同じにし
てもいいような気もします。
HTMLの場合でも「<」は途中ではないから両立はできると思います。

これを変更するとすれば、入力文字が「a#a」の場合、β13現在では「#a」まで
を拾って入力としていますが、「a#a」までを拾うようにするべきになったりす
る必要もあると思います。

[ ]
RE:09321 単語補完の単語の種類:カスタムNo.09322
K'zawa さん 17/02/06 15:00
 
秀丸担当さん、こんにちは。
K'zawaです。

>先頭と途中に両方同じものを定義する場合は、アルファベットのときと同じにし
>てもいいような気もします。
>HTMLの場合でも「<」は途中ではないから両立はできると思います。
>
>これを変更するとすれば、入力文字が「a#a」の場合、β13現在では「#a」まで
>を拾って入力としていますが、「a#a」までを拾うようにするべきになったりす
>る必要もあると思います。

不都合がなければ、それでよいとおもいます。

[ ]
RE:09322 単語補完の単語の種類:カスタムNo.09323
秀丸担当 さん 17/02/07 10:08
 

入力文字が「a#a」の場合、入力として取り込む文字列も「a#a」となるように修
正して、β版を出そうと思います。

[ ]
RE:09323 単語補完の単語の種類:カスタムNo.09325
K'zawa さん 17/02/07 20:41
 
秀丸担当さん、こんにちは。
K'zawaです。

>入力文字が「a#a」の場合、入力として取り込む文字列も「a#a」となるように修
>正して、β版を出そうと思います。

ありがとうございます。早速試してみました。

AutocompFlag1: 0x0001
AutocompFlag2: 0x4f00
単語の先頭文字: #$
単語の途中の文字: #$

入力が「#a」で、対象テキストが「##abc2」の場合、ここからの候補はなし。
対象テキストが「#abc1」の場合、そのまま候補。
対象テキストが「a#abc」の場合、「#abc」が候補。(※)

AutocompFlag1: 0x0001
AutocompFlag2: 0x4f00
単語の先頭文字: (空欄)
単語の途中の文字: #$

のとき、以前と違って、
「#a」のあとにカーソルがあって、範囲選択していない場合、入力が「a」にな
ります。(※)

※は、こちらとしては想定外の結果ですが、どうなんでしょうか?

以下余談ですが、
単語の定義と候補の拾い方が連動してしまっていることに無理があるように思え
てきました。

No.9321より
>単語の先頭文字: #$
>単語の途中の文字: #$
>この場合はアルファベットのときと同じではなく、候補を拾うときは追加された
>先頭文字が出たときに、それをすぐに先頭とみなすようになっていました。

この処理を、デフォルトONのオプションとして、表に出してしまって、OFFにし
たらアルファベットのときと同じように候補を拾うようにする。

としたほうが仕様が理解しやすいのではないでしょうか?
ファイルタイプ別の設定なので、それぞれでうまくいけばよいと思います。

[ ]
RE:09325 単語補完の単語の種類:カスタムNo.09328
秀丸担当 さん 17/02/08 11:13
 

なかなか使用と動作が定まらなくてすみません。

>対象テキストが「a#abc」の場合、「#abc」が候補。(※)
これは以前と同じではありますが、今回の修正の対象になってもいい境界だと思
います。

>「#a」のあとにカーソルがあって、範囲選択していない場合、入力が「a」にな
>ります。(※)
これは確かに今回の修正でそうなっていました。
このようにはならないべきだと思います。

>この処理を、デフォルトONのオプションとして、表に出してしまって、OFFにし
>たらアルファベットのときと同じように候補を拾うようにする。
>
>としたほうが仕様が理解しやすいのではないでしょうか?

確かに、互換性を維持しつつわかりやすくするためにはオプション追加のほうが
いいと思いますが、かなり深いところにある設定で、現状で既に条件が非常に多
岐にわたっています。
さらにオプションONの場合とオプションOFFの場合の両方で互換性を維持し続け
ていくのは大変そうです。

とりあえず、なかなか正式版が出せないでいるので、β14の修正は反映せず従来
のままで正式版として、引き続き次のバージョンで検討したいと思います。

[ ]
RE:09328 単語補完の単語の種類:カスタムNo.09332
K'zawa さん 17/02/11 17:07
 
秀丸担当さん、こんにちは。
K'zawaです。

Version 8.71 Beta 1

ありがとうございます。これでよいと思います。

>>対象テキストが「a#abc」の場合、「#abc」が候補。
>これは以前と同じではありますが、今回の修正の対象になってもいい境界だと思いま
>す。

もしも他のユーザーさんから異論があれば、この部分は妥協できます。

[ ]
RE:09332 単語補完の単語の種類:カスタムNo.09333
秀丸担当 さん 17/02/13 10:18
 

ご確認ありがとうございます。
V8.71β1のような感じでよさそうということで、これでしばらく使ったりしてみ
ます。

[ ]