【サクラエディタ】任意文字を含む行まで一括範囲選択コピー【操作画像あり】

快速ワーク
スポンサーリンク

サクラエディタで複数行の範囲選択テキストを一括で超簡単にコピーするマクロをJavaScriptで作ってみました。

わざわざマウスを使ってある程度まとまった行を選択する操作、めんどくさくないですか?

頻繁にコピー作業する人にはきっと役に立つと思います。ショートカットを割り当てておけば、作業の爆速化は確実です。

使えそうであれば、使ってみてください。


スポンサーリンク

一括行範囲選択マクロ(JavaScript)の操作イメージ

空行を次々と超簡単にコピーして別のテキストファイルに貼り付ける操作の例です。ショートカットキーを割り当てて操作してます。


一括行範囲選択マクロ(JavaScript)の主な仕様

細かい処理はコメントで補足してるので、ザックリとした仕様を箇条書きで記載します。

  • 現在行から任意の文字列で検索し、任意文字列を含む行の位置を割り出す。
  • 既に選択しているかをあらかじめチェックしておき、続けて連続でコピー可能とする。
  • 現在行の先頭から任意文字列を含む行の次の行先頭までを範囲選択する。
  • 選択開始行指定でジャンプし、範囲選択範囲選択モードをオンにして、選択最終行指定でジャンプして範囲選択する。
  • ファイル最終行に文字列を含む場合は、行指定ジャンプではなく、最終行に移動する。(ジャンプ機能ではうまくいかないため)
  • 範囲選択したテキストをクリップボードにコピー。




一括行範囲選択マクロ(JavaScript)ののソースコード

下記のソースを全てコピーしてファイルを作成し、マクロ配置場所(共通設定-マクロ)に格納してサクラエディタから起動してください。

一部のロジックは応用できると思うので、便利マクロの作成、JavaScriptの勉強などにもお役立てください。

// 任意文字列を含む行まで一括範囲選択コピー
// ※用途に応じて検索条件に任意の文字列を変更してご利用ください。(デフォルトは改行のみ)
// ※指定行で折り返されてる場合、正常に動作しないので
//  「設定(O)-折り返し方法(X)-折り返さない(X)」で実行してください。

var WshShell = new ActiveXObject("WScript.Shell");

var selStRow=0,selEdRow=0,curRow=0,hitRow=0,fileEndRow=0,searchStr="",rowSelect=false;

try {

  // 行選択チェック
  selStRow = GetSelectLineFrom; // 選択開始行取得
  selEdRow = GetSelectLineTo;   // 選択終了行取得
  if (selStRow != selEdRow) { rowSelect = true; }

  if (!rowSelect) {
    // 行を選択していない場合
    GoLineTop; // 行頭に移動(折り返し単位)
    curRow = Number(ExpandParameter('$y')); // 実行開始時の行
    
  } else {
    // 行を選択している場合
    curRow = selStRow
    
  }
  
  // 検索文字列を設定(お好みでどうぞ)
  searchStr = "^(\r\n|\n)"; // 正規表現Crlfまたはlfのみの行
  //searchStr = "^[  \t]*(\r\n|\n)"; // 全角・半角スペースやタブも空行とみなす場合
  //searchStr = "end if"; // 任意の文字列を含む行までとする場合(例:if~"end if")
  
  // 文字列検索 ※正規表現で検索するため、検索オプションが変わるので注意。
  SearchNext(searchStr, 4);
  hitRow = Number(ExpandParameter('$y')); // 検索ヒット行取得
  
  // 最終行チェック
  GoFileEnd; // ファイルの最後に移動
  fileEndRow = Number(ExpandParameter('$y')); // ファイル最終行取得
  
  Jump(curRow,0);              // 現在行の先頭へジャンプ
  SearchClearMark;             // 検索マークの切替え(ハイライト解除)
  
  BeginSelect;                 // 範囲選択範囲選択モードオン
  
  if (hitRow < fileEndRow-1) { // 検索ヒット行がファイル最終行ではない場合
    Jump(hitRow+1,0);          // 検索ヒット行の一つ下先頭へジャンプ
    
    // 検索ヒットしない場合
    //if (preRow == hitRow) { GoFileEnd; } //ファイルの最後まで選択
    
  } else {
    // 検索文字列を含む行が[EOF]で終わってるか、[EOF]のみ行の一つ前の行に含む場合
    GoFileEnd; // ファイルの最後に移動
    
  }
  
  Copy; // 選択範囲をコピー
  
} catch (error) {
  WshShell.Popup(error ,0,"エラー",0);
  CancelMode; // 各種モードの取り消し
  
}

ソース内にも記載してますが、指定行で折り返されてる場合、正常に動作しないので「設定(O)-折り返し方法(X)-折り返さない(X)」で実行してください。

当処理は「SearchNext」コマンドで「4:正規表現」で検索かけて位置を取得してます。検索ボックスのオプションが強制的に変更されますのでご注意ください。
普段使ってる検索時の設定にしたい場合は「SearchNext」を参考に引数を調整してください。
例)「検索ダイアログを自動的に閉じる」をonにしておきたい場合は「4:正規表現(0x04)」+「16:検索ダイアログを自動的に閉じる(0x10)」で「20」を設定。


最後に

今回は自分が普段の作業で使ってる一括範囲選択コピーマクロをご紹介させていただきました。

ちょっとした簡単なマクロで作業効率化に抜群に効果がある可能性があります。

サクラエディタは超有効ツールなので、マクロに登録してぜひ使ってみてください。

いろいろなショートカットキーと組み合わせてぜひ活用してみてください。

サクラエディタ全ショートカットキー一覧はこちら↓↓↓

サクラエディタの使い方や機能がわかるショートカットキー全まとめ一覧【初心者こそ必見】
サクラエディタを使っていますでしょうか? 極上の機能を備えていながら、なんと無料!!仕事でも勉強でも大いに役立つ超オススメの神ツールです。開発者様には感謝です。エクセルやワードよりも使用頻度が高い人は結構多いと思います。...

コメント

//▼2023/04/08追加 //https://lovagelab.com/posts/3406/ //▲2023/04/08追加