◀一般トップへ
  • 5992 GREP置換
    • 5993 RE: GREP置換
      • 5996 Re2: GREP置換
        • 5998 Re3: GREP置換
          • 6037 Re4: GREP置換
  • [5992] GREP置換 K 2007年04月09日 23:05

    題名まんまなのですが、GREP結果すべてに置換するいい方法はないでしょうか?
    過去ログにマクロはあったのですが、GREPウィンドウ以外は全部閉じなきゃいけないとか、微妙に使いにくいです。

    VC#のリファクタリングっぽく使いたいのです。
    本体の機能としてあってもいいと思うのですが、
    なかなか実装されないということは難しいのでしょうか・・・
    • [5993] RE: GREP置換 げんた 2007年04月10日 00:15

      >題名まんまなのですが、GREP結果すべてに置換するいい方法はないでしょうか?
      個人的に昔Perlで作ったことはありますけど...
      Grep結果を書き換えて,それを元のファイル群に書き戻すというツールです.
      しかし残念なことに行方不明になっています.

      >難しいのでしょうか
      このエディタでは基本的に1ウィンドウ1ファイルしか扱えないので,他のファイルを書き換えたり,別のデータを読み込んで保持したりといった機能が無いのです.

      (行番号が変わっていないことを前提に)Grep結果を編集して書き戻すだけであれば,一時ファイルに保存して外部ツールを呼びだすマクロと書き戻しツール本体を作ればできるかもしれません.
      • [5996] Re2: GREP置換 fon 2007年04月10日 20:08

        サクラじゃなくて恐縮ですが「複数ファイルを一気に置換」↓とかはどうですかね。
        http://itpro.nikkeibp.co.jp/article/COLUMN/20060731/244742/

        あとWindowsですらないんですけど、perlとかを使って簡単にやる方法を参考まで。
        % find . -name '*.[ch]' -or -name '*.cpp' | xargs perl -pi -e 's/BEFORE/AFTER/g;'
        • [5998] Re3: GREP置換 K 2007年04月10日 21:37

          >fonさん
          複数ファイルを置換するだけなら、いろいろ方法はあるんですが、
          サクラエディタからシームレスに検索置換できるようにしたいんですよね~
          これがなかなか難しい。

          > 別のデータを読み込んで保持したりといった機能が無いのです
          確かに、マクロのコマンドも他ファイルにアクセスするものがないですね。
          自分でスクリプトを組んでみたんですが、編集中の他のファイルのEditorオブジェクトが取得できず、
          置換できず挫折しました。

          結局、外部ツールを探しました。
          サクラのGREPと同等の機能を持つツールがなかなか見つからなかったのですが、
          Devasというツールが結構よさげです。
          ・シンプルかつ軽い
          ・単語単位の検索ができる。
          ・コマンドで詳細条件が指定できる
          ・フォルダ、検索条件の履歴が残せる
          ・外部エディタとの親和性が高い

          Ctrl+Shift+G に登録して使ってます。
          GREP代わりになるので、Ctrl+Gでもいいくらい。
          記念にマクロを。

          // カレントディレクトリを検索フォルダに
          var path = Editor.GetFilename();
          var last = path.lastIndexOf("\\");if (last > 0)
          path = path.substring(0, last);

          // 選択中の単語を検索語に指定
          Editor.ExecCommand("Devas\\Devas.exe " + path + " -s $C");
          • [6037] Re4: GREP置換 Ken 2007年04月21日 11:33

            便利そうなので利用させていただきたいと思い割り込ませていただきました。すみません。
            二点お教えください。
            もし、サクラエディタがProgram Filesにある場合は最終行は下記のような設定でよいのでしょうか?
            Editor.ExecCommand("C:\\Program Files\\Devas\\Devas.exe " + path + " -s $C");
            また、マクロとして登録する場合には、//Devas.macを最初の行として付け加えるのでよいでしょうか?