|
うまく伝わらなかったようで(^^;
まず、一時的にモードを変更するような面倒な事は誰もしたくないと思います。
ツールバーのボタン一発で変更したり戻したりできるのなら別ですが。
もしくはマクロで変更できるとか。
次に、単語右の動作については現状の機能はそのままに、別コマンドでそういうのが
あればいいなという事です。
ですので互換性に影響があるような変更は望んでいません。
あくまで、単語の区切りをフレキシブルに指定できないかなと、
今の単語右(左)の区切りだと不便なことがあるという事で、区切りを変えられる文字
列右あるいは単語右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;
}
}
}
}
}
|
|