秀丸エディタの単語右、単語左コマンドにNo.38495
ラフ さん 20/10/18 17:20
 
(1) 文字列右(区切り文字の次の文字まで移動)、文字列左のコマンドが欲しい
    SJISの通常モードでタブ区切りのテキストファイルを編集(拡張子がtxtなので通
常編集)するのですが、
    漢字かな半角文字交じりだと次のフィールドの先頭に行くまでに
    何回も操作が必要になっている。
    で、できれば区切り文字指定ができるとうれしい。
    a) タブ、改行のみ
    b) ホワイトスペース
    c) b)を含むASCII文字全て
    d) b)を含む半角文字全て
    e) 正規表現指定
    みたいな感じ。

(2) 編集中の文字コードによって単語の扱いを変えて欲しい
    unicodeで編集することが多くなってきたのですが、
    unicodeの0x4eなどから始まるCJK統合漢字が半角扱いになっているようで
    行き過ぎたところまでカーソルが移動します。

(3) 単語右、単語左に(1)の区切り文字指定を可能にする。

(2)が大変そうなら、(1)か(3)で正規表現指定でも有ればある程度代用できるかなと
思いますけど。

[ ]
RE:38495 秀丸エディタの単語右、単語左コNo.38496
秀丸担当 さん 20/10/19 09:17
 


区切り文字への移動は、TSV/CSVモードであれば、「タブ前進」「タブ後退」コマン
ドで移動する方法があります。
拡張子.txtで通常はTSV/CSVモードでない場合はただのタブストップ位置への移動に
なるので、一時的に[表示]→[タブストップ]→[TSVモード(タブ区切り)]をしてモー
ドの切り替えを行う必要があります。

単語左右の動作については、互換性の面から動作を変えるのは難しいところがありま
す。
マクロの文もwordrightとwordright2文と互換性維持のための種類があったりします。
ただunicodeの4eから始まる文字は確かにおかしいと思います。これは不具合扱いで
変更したほうがよさそうです。

タブやスペースの次の文字への移動や、自由なカスタマイズされたものにするには、
やはりマクロにするのがいいと思います。
例えばタブと空白の次の文字に移動するとしたら、以下のようなマクロでできると思
います。
setcompatiblemode 0x20000;
searchdown "[\t ]+",regular
if(result!=false){
    right;
}

[ ]
RE:38496 秀丸エディタの単語右、単語左コNo.38497
ラフ さん 20/10/20 14:47
 
うまく伝わらなかったようで(^^;

まず、一時的にモードを変更するような面倒な事は誰もしたくないと思います。
ツールバーのボタン一発で変更したり戻したりできるのなら別ですが。
もしくはマクロで変更できるとか。

次に、単語右の動作については現状の機能はそのままに、別コマンドでそういうのが
あればいいなという事です。
ですので互換性に影響があるような変更は望んでいません。
あくまで、単語の区切りをフレキシブルに指定できないかなと、
今の単語右(左)の区切りだと不便なことがあるという事で、区切りを変えられる文字
列右あるいは単語右2のようなものがあればという考えです。
もちろん左もですが。
ふつうの文章なんかは単語右で、スクリプトソースなんかは単語右2でみたいな感じ
です。

最後に、マクロは自分でも書いていて、文字列右はだいたいOKですが、文字列左が納
得いく動作が書けていないとか、
もう一歩進んで半角記号も単語右のように飛ばした動きにしたいとか、
区切りをもう少し変更できるようにしたいなど、いろいろあって要望で出しました。


ちなみに、書いていただいたマクロでは思うようには動作しません。
例えば
setcompatiblemode 0x20000;
searchdown "[\t ]+",regular
if(result!=false){
    right;
}
というテキストで単語右を先頭から行うと
0x20000;の先頭の0、行末、次行のsearchdownのs、\tのt、regularのr、行末、
次行ifのi、resultのr、falseのf、行末、次行rightのr、行末、次行の行末
の順に移動しますが、
上記マクロで動作させると、
0x20000;の先頭の0、次行の"[の"、]、regularのr、行末、次行の2個目の空白、4個
目の空白
の順に移動してそこで止まります。
そうではなくて、動き的には単語右、単語左を踏襲しながら単語という塊の意味を現
状とは違うものを追加(変更ではない)してほしいという意味合いです。
なお、自作の文字列右マクロでは、以下のように動きます。
0x20000;の先頭の0、行末、次行のsearchdownのs、"[の"、]、行末、
次行ifのi、行末、次行rightのr、行末、次行の}、行末


個人的に描いたマクロは以下のとおり
文字列右はほぼ動いてはいるが、単語右2(にしたい動き)にはなっていない。文字列
左が未だうまく書けない(^^;

// 文字列右(記号含む)
//
// 単語右だと半角や、全角でも漢字とカナ/かなで区切られてしまうが、
// タブ区切りなどで次フィールドへ移動したい場合があり複数回操作が必要になる。
// そこで、タブ空白改行の次の通常文字まで移動するマクロを作成した。
// 行末に到達した場合は行末で停止するモードも作成
// right;left;しているのは移動後のカーソルが反転表示になるので(ほかに方法あ
りそうだけど)
//
setcompatiblemode 0x00020000;
#stoplineend = 1; // 0=行末が来たら次行へ、1:行末で停止
#c = code;
while(1) {
 if (#c == -1) { //ファイル末にカーソルがある
  break;
 }
 if (#c == 0x0D) { //行末にカーソルがある
  right; // 次行の左端へ
  #c = code;
  if (#c != 9 && #c != 0x20) { //タブ又は空白以外にカーソルがある
   searchdown2 "[^ \t]" , regular, nocasesense; // 文字を探す
   right;
   left;
   break;
  }
 }
 if (#c == 0x09 || #c == 0x20) { //タブ又は空白にカーソルがある
  searchdown2 "[^ \t]" , regular, nocasesense; // 文字を探す
  #res= result;
  if( ! #res )  { // 見つからない
   golineend; // 行末へ
   break;
  } else { // 見つかった
   right;
   left;
   break;
  }
 } else { // 文字の上にカーソルがある
  searchdown2 "[ \t\n]" , regular, nocasesense;
  #res= result;
  if( ! #res )  { // 見つからない
   golineend; // 行末へ
   break;
  } else { // 見つかった
   #c = code;
   if (#c == 0x0D) { //行末が見つかった
    if(#stoplineend == 1) {
     right;
     left;
     break;
    }
   }
  }
 }
}

[ ]
RE:38497 秀丸エディタの単語右、単語左コNo.38498
秀丸担当 さん 20/10/20 16:44
 

一時的にTSVモード等にしたいかどうかは、状況によるかもしれません。
ツールバーに配置するには、ツールバーを右クリックして「ツールバー詳細...」の
ダイアログの右下の「すべてのコマンドを表示」をONにして、テキストのボタンとし
て入れることができます。分類は「その他」の分類にあります。
マクロの場合はちょっと書き方がややこしくて、config "xTabMode:0x0001";とする
とできます。

タブと空白のマクロの例は思うようにならないということで失礼しました。
既にマクロを作られているということで、すごいですね。
単語は単純に区切りで表すことができない場合もあって、例えばひらがなとカタカナ
は別の種類ですが、「あー」と「アー」の長音記号はどちらでも通用するとかあった
りします。
正規表現で表すのも難しいと思います。完全に自由にするにはマクロでプログラム的
に判断するのが一番近いと思います。
マクロを使わず設定でやるとしたら、文字の種類を分類化して、分類ごとに範囲を指
定できるのがいいと思いますが、正規表現や文字の羅列だと厄介な面があると思いま
す。
最近は、[ファイルタイプ別の設定]→[フォント]→[第2フォント]の文字コードの範
囲指定の方法があって、これに類似した方法であればやりやすいかもしれません。
そういうこともできたらいいということで、ご意見参考にさせていただきます。

[ ]
RE:38498 秀丸エディタの単語右、単語左コNo.38520
ラフ さん 20/10/22 18:09
 
TSVモード使ってみましたが、元々のファイルが完全なTSV形式でなく(拡張子txtにし
ている理由)、
データ行はTSV、それ以外の行は普通のテキスト行なためタブ間隔が大変なことにな
ってしまいます(^^)
やはり通常テキスト編集でなんとかするしかないようです。

unicodeでの単語右(左)の問題を不具合として修正してもらえるなら半分解決なので、
あとは時間かかるけど、地道にマクロ書いてみようと思います。

[ ]