人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

秀丸エディタで、選択範囲の行頭&行末に文字を挿入

秀丸エディタで、選択範囲の行頭&行末に文字を挿入するマクロがあれば、教えて頂けないでしょうか?

ちなみに、
秀丸エディタで指定範囲の文字列を指定文字列で囲むマクロ
ttp://d.hatena.ne.jp/shouh/20160417/1460847168

これだと、選択範囲の最初と最後にしか文字が追加されません

すべての行の行頭&行末に特定の文字列を挿入
ttp://honey8823.hateblo.jp/entry/2015/08/11/120020

動作的にはこれが近いですが、「選択範囲」ではなく「すべての行」に文字が追加されます。

●質問者: shingm
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kaoato
●10ポイント
///////////////////////////
// ◆ユーザ設定
// 行頭に挿入する文字列
$header = "[";
// 行末に挿入する文字列
$footer = "]";
///////////////////////////
#tmplineno = seltopy; #endline = selendy;
// #endline まで繰り返し while (code != eof) {
// 行頭 moveto 0, #tmplineno; insert $header; // 行末 moveto linelen, #tmplineno; insert $footer;
//次の行へ #tmplineno = #tmplineno + 1; movetolineno 1, #tmplineno + 1; if (#tmplineno > #endline) break; }


2つめのマクロを少し変更してみました。

範囲指定してから、上記のマクロを呼び出すと、期待通りの動作をするかと思います。


shingmさんのコメント
ありがとうございます。 試してみたのですが、一番下の行を選択してマクロを実行すると何も起きませんでした。

2 ● 空腹おやじ
●90ポイント ベストアンサー

挿入の基準が「行」となるようなので、
1行のみを対象とするような場合に
「文字を選択していないくてもキャレットがあればその行を選択している」
とみなして良いのであれば、次のような感じで。

キャレットが行頭にある場合について

$BegininiOfLine = ">>";
$EndOfLine = "<<";

if ( selecting == 1 )
{
escape;

#TargetLine = seltopy + 1;

if ( selendx == 0 )
{
#EndLine = selendy;
}
else
{
#EndLine = selendy + 1;
}

movetolineno 1, seltopy + 1;
}
else
{
#TargetLine = lineno;

#EndLine = lineno;
}

gofileend;
#FileEndLine = lineno;

movetolineno 1, #TargetLine;

while ( #TargetLine != #EndLine + 1 )
{
golinetop;
insert $BegininiOfLine;

golineend;
insert $EndOfLine;

#TargetLine = #TargetLine + 1;

if ( #TargetLine >= #FileEndLine )
{
break;
}

movetolineno 1, #TargetLine;
}

shingmさんのコメント
ありがとうございます。 試してみたところ、複数行を選択して、一番下の選択行が最終行(ファイルの最下段)であった場合、最終行のみ文字挿入が行われません。

空腹おやじさんのコメント
失礼しました。 最後のifの判定条件が間違ってました。 >|sh| $BegininiOfLine = ">>"; $EndOfLine = "<<"; if ( selecting == 1 ) { escape; #TargetLine = seltopy + 1; if ( selendx == 0 ) { #EndLine = selendy; } else { #EndLine = selendy + 1; } movetolineno 1, seltopy + 1; } else { #TargetLine = lineno; #EndLine = lineno; } gofileend; #FileEndLine = lineno; movetolineno 1, #TargetLine; while ( #TargetLine != #EndLine + 1 ) { golinetop; insert $BegininiOfLine; golineend; insert $EndOfLine; #TargetLine = #TargetLine + 1; if ( #TargetLine > #FileEndLine ) { break; } movetolineno 1, #TargetLine; } ||<

shingmさんのコメント
思った通りの動作になりました! このたびは本当にありがとうございました。

空腹おやじさんのコメント
お役に立てたようで良かったです。 ベストアンサーありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ