行頭の//を削除するマクロを書きたいNo.34296
matushiro97 さん 15/07/09 16:18
 
一行の中で行頭に//があれば削除するマクロを書きたいのですが,どのように記述す
ればいいかわかりません.条件としては
@行頭の定義.//の前に空白やタブがあっても行頭と見なす.
A行頭以外の//はそのまま残す

宜しくお願いします,

[ ]
RE:34296 行頭の//を削除するマクロを書きNo.34298
でるもんたいいじま さん 15/07/09 19:22
 
こんにちは、でるもんた・いいじまです。

> 一行の中で行頭に//があれば削除するマクロを書きたいのですが,
> どのように記述すればいいかわかりません.条件としては
> @行頭の定義.//の前に空白やタブがあっても行頭と見なす.
> A行頭以外の//はそのまま残す

マクロよりも、正規表現での置換の話になると思います。
もちろん、頻用するようなら置換命令1行だけのマクロファイルを
作ってもいいのですが。

置換ダイアログで、
検索(S): ^\s*//
置換(E): 空欄
その下のパラメータでは、「正規表現(R)」にチェック

☆ ☆ ☆

正規表現の使い方は秀丸のヘルプにもありますし、他の例も色々とあるので、
調べてみると視野が広がると思いますが、いちおうここで使っている範囲で、
「検索(S)」欄の内容について説明。

^ は、先頭で使うと「行頭」の意味になります。

\s は半角の空白類全般という意味です。仮にたとえば「半角スペース、
タブ、全角スペースの3種類だけを対象にしたい、Ctrl+Lなどは対象に
したくない」と思ったら、\sの代わりに [  \t]とします。

* は、その左側のパターンが0個以上続く(何個あってもいい)、という
意味です。\s* なら半角空白類が0個以上、[  \t]* なら[]内の3文字が
0個以上。

そのあとの // は正規表現の文法的には特別な意味はないので、そのまま
スラッシュが2個という意味になります。

ではでは。

[ ]
RE:34298 行頭の//を削除するマクロを書きNo.34299
matushiro97 さん 15/07/10 00:08
 
でるもんた・いいじま様

有難うございました.

早速試してみました.

1,結果は,//が行頭にあるとうまく行きますが,//の左に空白があるとうまくいき
ません.

私の理解不足と思いますが,どうすれば正しく処理できるでしょうか

2,カーソルが//の左と右にある場合で,上の検索,下の検索を使い分ける必要はあ
りますでしょうか.

3,多用しますのでマクロ化したいのですが,「キー操作の記録」を開始しても,記
録されません.どうすればいいでしょうか.

ご教示いただければ幸いです.


[ ]
RE:34299 行頭の//を削除するマクロを書きNo.34300
matushiro97 さん 15/07/10 03:25
 
やりたいことは,コメントアウトと解除ですが,他の方がマクロを作成示していらっ
しゃいました.これを応用します.

http://tipszone.jp/20130206_comment_out_mac/#comment-10448

有難うございました.

[ ]
RE:34299 行頭の//を削除するマクロを書きNo.34301
でるもんたいいじま さん 15/07/10 09:29
 
でるもんた・いいじまです。

まだ見ていらっしゃいますか?

> 早速試してみました.
> 1,結果は,//が行頭にあるとうまく行きますが,
> //の左に空白があるとうまくいきません.
> 私の理解不足と思いますが,どうすれば正しく処理できるでしょうか

お役に立てずに申し訳ありません。私のほうでは再現できておりません。

念のためお伺いしたいのですが、秀丸のバージョン(当方の環境は8.54β7)
と、「正規表現(R)」の右側に出ているDLLバージョン番号(手元の環境では
「HMJRE.DLL V4.11」と出ています)を教えていただけないでしょうか。

もしバージョンが極端に古いようでしたら、8.54βの最新版を上書き
インストールしてみてください。管理者権限の都合でできないのであれば、
当座は、^\sと書いた部分を ^[  \t] に変更してみてください。

> 2,カーソルが//の左と右にある場合で,上の検索,
> 下の検索を使い分ける必要はありますでしょうか.

あります。正確に言えば今回の場合、ファイルの頭からカーソル行までを
置換したければ上検索、カーソルの次の行からファイル末尾までを置換
したければ下検索になります。

> 3,多用しますのでマクロ化したいのですが,「キー操作の記録」を開始
> しても,記録されません.どうすればいいでしょうか.

ダイアログ操作は記録できなかったと思います。
下記の2行(と、必要ならコメントも;秀丸マクロのコメントは//です)を
書いたテキストを拡張子 .mac で保存してマクロ登録→キー割り当てして
ください。

    setcompatiblemode 0x20000;
    replaceallfast "^\\s*//", "", regular;

\s を文字列の中で使う場合は \\s とします。
[  \t]と書くのであれば、\t はそのまま\t でも \\t としても構わないはずです。

上記のようにASCII文字以外をマクロに記入するには、ファイルの文字コードは
Shift_JISかUTF-16LEにしてください(UTF-8は今のところ不可)。

[ ]
RE:34301 行頭の//を削除するマクロを書きNo.34302
秀丸担当 さん 15/07/10 10:06
 

マクロで既に解決されそうということで、参考までの情報として補足しておきま
す。
空白を残して「//」だけを消すとしたら、以下のようにするといいと思います。

検索文字列:(?<=^\s*)//
置換文字列:空欄

キー操作の記録では置換ダイアログでの操作も記録されますが、再生時にはダイ
アログは出ることはなく、そのときの置換操作が記録されます。

置換ダイアログからの置換では、カーソル位置から見た前後の位置を気にする必
要があります。
カーソル位置を気にせずに、範囲選択または、カーソル位置の行だけを対象にし
てマクロにするとしたら、以下のような感じにするといいと思います。

setcompatiblemode 0x00020000;
disabledraw;
if(!selecting){
  selectline;
}
replaceall "(?<=^\\s*)//","",regular,inselect;
escapeinselect;

[ ]
RE:34301 行頭の//を削除するマクロを書きNo.34304
matushiro97 さん 15/07/11 01:08
 
見ています.
有難うございます.

秀丸のバージョン(当方の環境は8.54β7)
→32bit 8.52

>と、「正規表現(R)」の右側に出ているDLLバージョン番号
→同じくHMJRE.DLL V4.11」です.


宜しくお願いします.

[ ]
RE:34302 行頭の//を削除するマクロを書きNo.34305
matushiro97 さん 15/07/12 11:09
 
>
>マクロで既に解決されそうということで、参考までの情報として補足しておきます。


>空白を残して「//」だけを消すとしたら、以下のようにするといいと思います。
上のリンク先のマクロは,//に左に空白やタブ文字列がある場合にショートカット
キーを押すと//の削除でなく,さらに行頭に//がつくので,それでご教示いただいた
マクロを使わしていただきます.

行頭に//がなければ,//を挿入する.挿入位置は@タブがなければ行頭,Aタブがあ
れば最初のタブ位置,というマクロをどうすればいいのでしょうか.
ご教示いただければ幸いです.

宜しくお願いします.


[ ]
RE:34305 行頭の//を削除するマクロを書きNo.34306
山紫水明 さん 15/07/12 17:00
 
 matushiro97さん,

>行頭に//がなければ,//を挿入する.挿入位置は@タブがなければ行頭,Aタ
>ブがあれば最初のタブ位置,というマクロをどうすればいいのでしょうか.
>ご教示いただければ幸いです.

 行頭から20字目まで//がなければ,//を挿入するとしてみました。

//-----------------------------------------------------
setcompatiblemode 0x00020000;
disabledraw;
begingroupundo;
if( !selecting ) selectline;
$line = gettext2( 0, seltoplineno, 20, seltoplineno, 1 );
if( strstr($line, "//") >= 0) {
    replaceallfast "(?<=^\\s*)//","",regular,inselect;
} else {
    replaceallfast "^(\\t?)","\\1//", regular,inselect;
}
endgroupundo;
escapeinselect;
endmacro;
//-----------------------------------------------------

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:34306 行頭の//を削除するマクロを書きNo.34307
山紫水明 さん 15/07/13 07:43
 
 追伸です,
 若干手抜きしたところがありました。次のようにした方がよさそうです。

//-----------------------------------------------------
setcompatiblemode 0x00020000;
loaddll "HmJre.dll";
disabledraw;
begingroupundo;
if( !selecting ) selectline;
$line = gettext2( 0, seltoplineno, linelen2, seltoplineno, 1 );
#n = dllfunc( "FindRegular", "^\\s*//", $line, 0 );
if( #n >= 0 ) {
    replaceallfast "(?<=^\\s*)//","", regular, inselect;
} else {
    replaceallfast "^(\\t?)","\\1//", regular, inselect;
}
endgroupundo;
escapeinselect;
freedll;
endmacro;
//-----------------------------------------------------

                   山紫水明

[ ]
RE:34307 行頭の//を削除するマクロを書きNo.34308
matushiro97 さん 15/07/16 23:10
 
山紫水明さん

あるが当ございました。
活用させていただきます。

[ ]