|
>秀丸担当さんが作成されたマクロを登録して、キーに割り当てて
>使用しているのですが、単語を左に移動する場合でうまく動作
>しないケースがあるのです。
>数字が英字ではさまれている場合、例えば以下のような単語
> hoge1st
>だと、1の前後をカーソルが行ったり来たりして、左へ移動しなく
>なってしまうのです。
>どうすれば期待の動作になるか、教えていただけないでしょうか。
マクロを投稿した後に、このマクロではうまくいかないケースがあることに気付
きました。
その後多少マクロを修正したりしてみましたが、$wordの設定によってはうまく
いかないこともあるようです。
$wordが固定なら大丈夫かもしれませんが、$wordによるカスタマイズ性能を完全
にするにはさらにマクロの処理を複雑にする必要があるようです。
以下のマクロはその後修正したものですが、$wordによるカスタマイズ性能は完
全ではないです。
//単語左カスタマイズ
//-----以下設定
#fShift = 0; //Shift+Leftに割り当てて範囲選択するマクロの場合 1
$word = "([a-z_0-9]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]+)";
#fLeftStop = 1; //単語の左側に停止させる場合 1
#fRightStop = 1; //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1; //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定
disabledraw;
$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && #fShift != 0 ) {
beginsel;
}
if( selecting ) {
#fLeftStop = #fLeftStopAtSel;
#fRightStop = #fRightStopAtSel;
}
#c = column;
#l = lineno;
Retry:
searchup2 $word, regular, nocasesense;
if( result == false ) goto Exit;
moveto foundendx, foundendy;
if( #fRightStop != 0 && (lineno < #l || column < #c) ) {
goto Exit;
}
#x = foundtopx;
#y = foundtopy;
#fx = foundendx;
#fy = foundendy;
movetolineno #c + 1, #l;
while( 1 ) {
searchup2 $word, regular, nocasesense;
if( result == false ) break;
if( #fx != foundendx || #fy != foundendy ) break;
#x = foundtopx;
#y = foundtopy;
}
moveto #x, #y;
if( #fLeftStop == 0 ) goto Retry;
Exit:
endsel;
setsearch $searchbuffer, #searchoption;
enabledraw;
endmacro;
//単語右カスタマイズ
//-----以下設定
#fShift = 0; //Shift+Rightに割り当てて範囲選択するマクロの場合 1
$word = "([a-z_0-9]+|[ァ-ヶ][ァ-ヶー]*|[ぁ-ん][ぁ-んー]*|[亜-K]+)";
#fLeftStop = 1; //単語の左側に停止させる場合 1
#fRightStop = 1; //単語の右側に停止させる場合 1
#fLeftStopAtSel = 1; //選択中、単語の左側に停止させる場合 1
#fRightStopAtSel = 1; //選択中、単語の右側に停止させる場合 1
//-----以上設定
$searchbuffer = searchbuffer;
#searchoption = searchoption;
if( selecting == false && #fShift != 0 ) {
beginsel;
}
if( selecting ) {
#fLeftStop = #fLeftStopAtSel;
#fRightStop = #fRightStopAtSel;
}
Retry1:
#x = x;
#y = y;
Retry2:
searchdown2 $word, regular, nocasesense;
if( result == false ) goto Exit;
if( foundtopx == #x && foundtopy == #y ) {
moveto foundendx, foundendy;
if( #fRightStop == 0 ) goto Retry2;
} else {
moveto foundtopx, foundtopy;
if( #fLeftStop == 0 ) goto Retry1;
}
Exit:
endsel;
setsearch $searchbuffer, #searchoption;
endmacro;
>あと、キー操作の記録開始/終了で、キー操作を記録した場合に、
>これらのマクロを割り当てたキーを使用してしまうと、キー操作
>の再生で正しく再生されなくなってしまいます。
>キー操作を保存して、マクロの実行で実行させると正しく再生
>されます。
>キー操作の記録開始/終了では、キーに割り当てたマクロの
>実行には対応していないのでしょうか?
これも後から気付いたのですが、shiftを押している状態によって、記録時と再
生時で異なってしまうので、#fShift=0;のマクロと#fShift=1;のマクロを両方用
意する必要がありました。
計4つのマクロを作って、Ctrl+Left, Shift+Ctrl+Left, Ctrl+Right, Shift+
Ctrl+Right それぞれに割り当てなくてはいけません。
キー操作の再生とマクロ実行の差異は無いと思います。
|
|