2011年4月19日火曜日

サクラエディターで特定の文字の桁位置を揃える

そういうマクロは有るみたいですけど、「マクロを入れるのも面倒だなぁ」って時はこんなやり方でどうでしょう? 一応、2千行くらいのテキストでやったことがあります。 それぐらいの行数ならもたつかずに出来るみたいです。 (環境はWinXP、Pen4 2.6c、メモリ512MB)

  1. 行の折り返しをしている場合、設定 → 折り返し方法 → 折り返さない
  2. こんなテキストで、コロン(:)で桁揃えしたい場合、
    ~\data-commands.c(53,9)  [SJIS]: typedef struct _GimpDataDeleteData GimpDataDeleteData;
    ~\data-commands.c(55,1)  [SJIS]: struct _GimpDataDeleteData
    ~\base-types.h(50,9)  [SJIS]: typedef struct _BoundSeg            BoundSeg;
    ~\base-types.h(52,9)  [SJIS]: typedef struct _GimpHistogram       GimpHistogram;
    ~\base-types.h(53,9)  [SJIS]: typedef struct _GimpLut             GimpLut;
    ~\base-types.h(55,9)  [SJIS]: typedef struct _ColorBalance        ColorBalance;
    ~\base-types.h(56,9)  [SJIS]: typedef struct _Colorize            Colorize;
    ~\pixel-region.h(49,1)  [SJIS]: struct _PixelRegionIterator
    ~\temp-buf.h(23,1)  [SJIS]: struct _TempBuf
    ~\threshold.h(23,1)  [SJIS]: struct _Threshold
    ~\tile-manager-private.h(23,1)  [SJIS]: struct _TileManager
    ~\tile-private.h(24,9)  [SJIS]: typedef struct _TileLink TileLink;
    置換で置換前「:」 → 置換後「(スペースたくさん):」とする。 スペースの数は、全行の揃えたい桁がスペースで埋まる程度。
    ~\data-commands.c(53,9)  [SJIS]               : typedef struct _GimpDataDeleteData GimpDataDeleteData
    ~\data-commands.c(55,1)  [SJIS]               : struct _GimpDataDeleteData
    ~\base-types.h(50,9)  [SJIS]               : typedef struct _BoundSeg            BoundSeg;
    ~\base-types.h(52,9)  [SJIS]               : typedef struct _GimpHistogram       GimpHistogram;
    ~\base-types.h(53,9)  [SJIS]               : typedef struct _GimpLut             GimpLut;
    ~\base-types.h(55,9)  [SJIS]               : typedef struct _ColorBalance        ColorBalance;
    ~\base-types.h(56,9)  [SJIS]               : typedef struct _Colorize            Colorize;
    ~\pixel-region.h(49,1)  [SJIS]               : struct _PixelRegionIterator
    ~\temp-buf.h(23,1)  [SJIS]               : struct _TempBuf
    ~\threshold.h(23,1)  [SJIS]               : struct _Threshold
    ~\tile-manager-private.h(23,1)  [SJIS]               : struct _TileManager
    ~\tile-private.h(24,9)  [SJIS]               : typedef struct _TileLink TileLink;
                                           ↑ここまでスペースで埋める
  3. 揃えたい桁から右を矩形選択(ALTを押しながら選択)して切り取る。
    ~\data-commands.c(53,9)  [SJIS]        |キリトリ
    ~\data-commands.c(55,1)  [SJIS]        |キリトリ
    ~\base-types.h(50,9)  [SJIS]           |キリトリ
    ~\base-types.h(52,9)  [SJIS]           |キリトリ
    ~\base-types.h(53,9)  [SJIS]           |キリトリ
    ~\base-types.h(55,9)  [SJIS]           |キリトリ
    ~\base-types.h(56,9)  [SJIS]           |キリトリ
    ~\pixel-region.h(49,1)  [SJIS]         |キリトリ
    ~\temp-buf.h(23,1)  [SJIS]             |キリトリ
    ~\threshold.h(23,1)  [SJIS]            |キリトリ
    ~\tile-manager-private.h(23,1)  [SJIS] |キリトリ
    ~\tile-private.h(24,9)  [SJIS]         |キリトリ
  4. 一時的に別のファイルを新規作成して、切り取ったテキストを貼り付ける。
           : typedef struct _GimpDataDeleteData GimpDataDeleteData;
           : struct _GimpDataDeleteData
        : typedef struct _BoundSeg            BoundSeg;
        : typedef struct _GimpHistogram       GimpHistogram;
        : typedef struct _GimpLut             GimpLut;
        : typedef struct _ColorBalance        ColorBalance;
        : typedef struct _Colorize            Colorize;
          : struct _PixelRegionIterator
      : struct _TempBuf
       : struct _Threshold
                  : struct _TileManager
          : typedef struct _TileLink TileLink;
  5. 一時ファイルの行頭から空白を消す。 (編集 → 整形 → 左(先頭)の空白を削除)
    : typedef struct _GimpDataDeleteData GimpDataDeleteData;
    : struct _GimpDataDeleteData
    : typedef struct _BoundSeg            BoundSeg;
    : typedef struct _GimpHistogram       GimpHistogram;
    : typedef struct _GimpLut             GimpLut;
    : typedef struct _ColorBalance        ColorBalance;
    : typedef struct _Colorize            Colorize;
    : struct _PixelRegionIterator
    : struct _TempBuf
    : struct _Threshold
    : struct _TileManager
    : typedef struct _TileLink TileLink;
  6. 一時ファイル全体をコピー(Ctrl-A、Ctrl-C)。
  7. 元のファイルに戻って、最初の行の行末、スペースで埋めた後にカーソルをあわせて矩形貼り付け。 (編集 → 矩形貼り付け)
    ~\data-commands.c(53,9)  [SJIS]        |←ここにカーソルをあわせる
    ~\data-commands.c(55,1)  [SJIS]        |
    ~\base-types.h(50,9)  [SJIS]           |
    ~\base-types.h(52,9)  [SJIS]           |
    ~\base-types.h(53,9)  [SJIS]           |
    ~\base-types.h(55,9)  [SJIS]           |
    ~\base-types.h(56,9)  [SJIS]           |
    ~\pixel-region.h(49,1)  [SJIS]         |
    ~\temp-buf.h(23,1)  [SJIS]             |
    ~\threshold.h(23,1)  [SJIS]            |
    ~\tile-manager-private.h(23,1)  [SJIS] |
    ~\tile-private.h(24,9)  [SJIS]         |
    おわり。
    ~\data-commands.c(53,9)  [SJIS]        : typedef struct _GimpDataDeleteData GimpDataDeleteData;
    ~\data-commands.c(55,1)  [SJIS]        : struct _GimpDataDeleteData
    ~\base-types.h(50,9)  [SJIS]           : typedef struct _BoundSeg            BoundSeg;
    ~\base-types.h(52,9)  [SJIS]           : typedef struct _GimpHistogram       GimpHistogram;
    ~\base-types.h(53,9)  [SJIS]           : typedef struct _GimpLut             GimpLut;
    ~\base-types.h(55,9)  [SJIS]           : typedef struct _ColorBalance        ColorBalance;
    ~\base-types.h(56,9)  [SJIS]           : typedef struct _Colorize            Colorize;
    ~\pixel-region.h(49,1)  [SJIS]         : struct _PixelRegionIterator
    ~\temp-buf.h(23,1)  [SJIS]             : struct _TempBuf
    ~\threshold.h(23,1)  [SJIS]            : struct _Threshold
    ~\tile-manager-private.h(23,1)  [SJIS] : struct _TileManager
    ~\tile-private.h(24,9)  [SJIS]         : typedef struct _TileLink TileLink;
  8. 折り返し方法を変更した場合、元に戻す。 (設定 → 折り返し方法 → 元の選択)

1行に複数のコロンがあるときは置換の検索文字列を工夫しなければならなかったり、この方法では出来なかったりします。 工夫ってのは正規表現でゴニョゴニョです。

やりがちなミスは置換のときにスペースが足りなくてコロンの前の文字をちょん切ってしまうことです。 そのへん注意で。

単純な方法なので、他のテキストエディターでも矩形選択と矩形貼り付けがあれば出来そうですね。