○何気ない日々の重複を探し出す

日々の所作のなかで大きな重複作業を見つけ出して、"塊"にして自動化のメカニズムを組み入れると、個人レベルでも効率化できることはある。

長年行っていると気が付かないが、なんか同じことを繰り返している動作・・・

まさしくこれじゃないか?コードのなかで意味を持ってしまう文字を普通にそのまま表示させるために、バックスラッシュ( \ )を入れて、エスケープする作業。
目視・検索で逐一エスケープしなければならないが、これをやってるときにふと思った。

アンダースコア( _ )、バックスラッシュ( \ )、アスタリスク(*)あたりが筆者の場合、頻繁に遭遇する本文内のこれらの文字の手前に\を挿入たり、変換することで意図通りの表示に直す。以前にも書いた(記事)がタグ周りでタグが効かないケースも稀に出てくるので、目視でのチェックが必要で一括置換すると、たいてい何かがおかしくなるため厳禁だ。

これは、やってみる価値がありそうだ。やはりテキストエディター上で段落ごとに判断して、選択範囲ごとにアンダースコア( _ )とバックスラッシュ( \ )はエスケープ、アスタリスク( * )は( * )に変換という感じで対応することが多いが、結構な手間である。
○選択範囲を手軽に置換するのは便利

秀丸のマクロでツールを作成できそうだ。秀丸のreplaceall replaceallfast文と「特定の範囲内だけで検索したい場合」の例を参考に必要な箇所を変える。

disabledraw;

if(selecting) {
replaceallfast "検索A", "置換A", inselect2;
selectinselect;

replaceallfast "検索B", "置換B", inselect2;
selectinselect;
}

アンダースコア( _ )は、( \_ )に、バックスラッシュ( \ )は( \\ )にエスケープ、アスタリスク( * )は全角の( * )にそれぞれ置換したいのだから、

disabledraw;

if(selecting) {

replaceallfast """_""", """\_""", inselect;
selectinselect;

replaceallfast """\""", """\\""", inselect;
selectinselect;

replaceallfast "*", "*", inselect;
selectinselect;

}

ここまでで、書いた本文中の文章から拾って試してみよう。

選択範囲ごとにアンダースコア(_)とバックスラッシュ(\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。

で上記マクロ実行してみると、

選択範囲ごとにアンダースコア(\\_)とバックスラッシュ(\\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。

となった。最初のアンダースコアにバックスラッシュが2つ追加されてしまっている。


これでは意図した動作にならない。保存されないストリーム/バッファのなかで置換するので、最初のreplaceallfastでの置換を二つ目のreplaceallfastでさらに置換してしまっているようだ。
○順番を入れ替えてみると・・・

変数を使った別の形などいろいろ検討してみたが、マクロを開いてすぐに変えられるこの形は変えたくない。順番を変えてみよう。

disabledraw;

if(selecting) {

replaceallfast """\""", """\\""", inselect;
selectinselect;

replaceallfast """_""", """\_""", inselect;
selectinselect;

replaceallfast "*", "*", inselect;
selectinselect;

}

こうすれば、バックスラッシュを対象とした置換は1回だけになるはず。個数増の影響も気になるので、例文を倍増して試してみよう。

選択範囲ごとにアンダースコア(_)とバックスラッシュ(\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。選択範囲ごとにアンダースコア(_)とバックスラッシュ(\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。

これを選択し、順番を変えたマクロを実行すると、

選択範囲ごとにアンダースコア(\_)とバックスラッシュ(\\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。選択範囲ごとにアンダースコア(\_)とバックスラッシュ(\\)はエスケープ、アスタリスク(*)は(*)に変換という自身で使えるものを作った方がいいのだ。

しっかり意図通り全部変換できている。なかで変換される文字を把握しながら追加しなければならないので、毎回試さないといけない。
しかし、どこに何を加えるかがわかりやすいので、その点は勝る。筆者の場合はこれでよかろう。

.
編集部おすすめ