|
kendoさん,こんにちは。
》 これはもともとむかしむかし『VZエディタ』のマクロで syoさんという方
》が作られた「stool」というマクロの機能の一部分です。この部分だけでもと
》ても便利なので連想しました。
》 (すでにライブラリにこうしたマクロはあるのでしょうか。ありましたらお
》教えください。)
Vzエディタは私も前に愛用していました。そこそこのマクロも作ったのです
が,今はもう眠っています。
ライブラリにはすでに類似のものがあるかもわかりませんが,以下のようなも
のを作ってみました。
では, (^^)/~
山紫水明
//-------- DealLine.mac --------------------------------------//
// 行の各種操作
$kd1 = "#";//指定文字初期値:変更できます
$tail = "。?.?";//文末記号:変更できます
if( selecting ) {
#topy = seltopy;
#endy = selendy;
#select = 1;
escape;
moveto 0, #topy;
}
$k = input( "指定する文字は?", $kd1 );
if( $k == "" ) endmacro;
menu "&A 指定文字前後の入れ替え",
"&B 指定文字から行末までを削除",
"&C 指定文字から文末までを削除",
"&D 行頭から指定文字までを削除",
"&E 指定文字を含む行を削除";
#r = result;
if( !#r ) endmacro;
disabledraw;
if( !#select ) gofiletop;
if( #r == 1 ) call Change;
else if( #r == 2 ) call DeleteAfterLine;
else if( #r == 3 ) call DeleteAfterSentence;
else if( #r == 4 ) call DeleteFront;
else call DeleteLine;
endmacro;
Change: // 指定文字前後の入れ換え
while( code != eof ) {
if( #select && y >= #endy ) break;
#bx = x; #by = y;
golineend2;
#ex = x; #ey = y;
$s = gettext( #bx, #by, #ex, #ey );
#str = strstr( $s, $k );
if( #str < 0 ) {
##line = lineno;
movetolineno 1, lineno + 1;
if( ##line == lineno ) break;
continue;
}
$s1 = leftstr( $s, #str );
$s2 = midstr( $s, #str + strlen( $k ) ,999 );
selectline;
delete;
golinetop2;
insert $s2 + $k + $s1 + "\n";
}
return;
DeleteAfterLine: // 指定文字から行末までを削除する
while( 1 ) {
searchdown $k;
if( !result ) break;
if( #select && y >= #endy ) break;
deleteafter;
}
return;
DeleteAfterSentence: // 指定文字から文末までを削除する
while( 1 ) {
searchdown $k;
if( !result ) break;
if( #select && y >= #endy ) break;
#line = lineno;
beginsel;
searchdown "[" + $tail + "]", regular;
if( ( #line != lineno) || ( result == 0 ) ) {
escape;
movetolineno 1, #line + 1;
continue;
}
right;
delete;
}
return;
DeleteFront: // 行頭から指定文字までを削除する
while( 1 ) {
searchdown $k;
if( !result ) break;
if( #select && y >= #endy ) break;
right;
beginsel;
golinetop2;
delete;
}
return;
DeleteLine:// 指定文字を含む行を削除する
moveto 0, #endy;
#eline = lineno;
moveto 0, #topy;
while( 1 ) {
searchdown $k;
if( !result ) break;
if( #select && lineno >= #eline ) break;
selectline;
delete;
#eline = #eline - 1;
}
return;
//----------------------------------------------//
|
|