|
操作でもできますがマクロだとこうなります。
//*5 tospace1.mac
selectall;
tospace;
endmacro;
//*5 totab1.mac
selectall;
totab;
endmacro;
ただ tospace の処理は誰が書いても同じですが、その逆 totab は好みによりま
す。1 個のスペースをタブに変換するのか、残すのか ? 、プログラム中のリテ
ラルはどうするのか ?
これは秀丸のマクロで、個人的な totab です。参考までに ...
次のデータをこのマクロで処理するとわかると思います、tab 4 です。
//*1 *** Macro for 「秀丸エディタ」***
//*1 【マクロ名】 KZ_ToTab1.mac - Ver. 03.04 - 1999/11/23
//*1 (C) Copyright 番頭++ (Bantou++). 1998 - 1999. All Rights Reserved.
//*1 【作者】 K.Nakatake / 番頭++ / E-mail:xxxxxxxx@nifty.ne.jp
//*1 【機能】
//*1 ・totab; の拡張処理 - 空白 ==> タブ 変換処理
//*1 ・tospace; は誰が作成しても同じですが、
//*1 totab; は解釈が異なるでしょう !!!
//*1 ・マクロとかには役に立ちます。と思います。
//*1 ・
//*1 【注意】
//*1 ・このマクロの仕様は予告無く変更されます。
//*1 ・
//
if( version < 216 ){ // inselect
message "すみません、version (2.16) のチェックを行なっています !";
about;
endmacroall;
}
disabledraw; disableinvert;
#top = no;
if( ! selecting ){
#xs = x; #ys = y;
gofiletop;
#top = yes; insertfix "\n";
selectall; tospace; escape;
} else {
#xs = seltopx; #ys = seltopy;
#xe = selendx; #ye = selendy;
if( #xs != 0 ){ #xs = 0; }
escape; moveto #xs, #ys;
if( ( #xs + #ys ) == 0 ){
#top = yes; insertfix "\n";
} else {
left;
}
beginsel; moveto #xe, #ye;
tospace;
}
//R $str_find1 = "[\x20][\x20]+|\"(\\\"|[^\"])+\"|'(\\'|[^'])+'|//.*$";
$str_find1 = "[\x20][\x20]+";
$str_find1 = $str_find1 + "|\"(([^\"\\\\]|\\\\[\\\\\"<>a-z0])+)\"|\"\"";
$str_find1 = $str_find1 + "|'(([^'\\\\]|\\\\[\\\\'<>a-z0])+)'|''";
$str_find1 = $str_find1 + "|[{;]\x20|}";
//R $str_find1 = $str_find1 + "|//.+$";
$str_find1 = $str_find1 + "|//";
searchdown $str_find1, regular, inselect;
while( result ){
escape;
if( code == '\x20' ){
#xa = seltopx; #ya = seltopy;
#xb = selendx; #yb = selendy;
moveto #xb, #yb;
call pp_tab1; // call pp_tab2; // 要カスタマイズです !!!
} else if( code == '/' ){
if( x != 0 ){
left;
while( code == '\x20' ){ delete; left; }
if( code != '\n' && code != '\t' ){
right; insert "\t";
} else {
right;
}
}
if( code != '/' ){ message "bug1"; endmacro; }
right 2;
if( code != '\n' && code != '\x20' && code != '\t' ){ right; }
if( code != '\n' && code != '\x20' && code != '\t' ){ right; }
if( code == '\x20' ){
beginsel;
while( code == '\x20' || code == '\t' ){ right; }
#xa = seltopx; #ya = seltopy;
#xb = selendx; #yb = selendy;
escape; moveto #xb, #yb;
beginsel; moveto #xa, #ya; delete;
while( x < #xb ){ insert "\t"; }
}
//R golineend2;
} else if( code == '{' || code == ';' ){
right;
if( code == '\x20' ){
while( code == '\x20' || code == '\t' ){ delete; }
insert "\t";
} else {
// left;
}
} else if( code == '}' ){
#x = x; #y = y;
left;
if( code == '\x20' ){
delete; insert "\t";
} else {
right;
}
right;
} else {
moveto selendx, selendy;
}
left;
finddown;
}
if( #top ){
gofiletop; delete;
}
//T moveto #xs, #ys;
moveto 00, #ys;
escape; setsearch "", 0x00; // 安易な記憶ケシ !!!
endmacro;
pp_tab1: // 是非とも Tab
beginsel; moveto #xa, #ya; delete;
while( x < #xb ){ insert "\t"; }
if( x > #xb ){ backspace; }
while( x < #xb ){ insert "\x20"; }
return;
pp_tab2: // 無理せず Tab
if( ( #xa / tabcount ) != ( #xb / tabcount )){
beginsel; moveto #xa, #ya; delete;
while( x < ( #xb - tabcount + 1) ){ insert "\t"; }
while( x < #xb ){ insert "\x20"; }
}
return;
endmacroall;
// end of macro.
|
|