【秀丸マクロ】ファイル保存時に行頭インデントだけをタブ文字に変更する【PHP・WordPress 対応】

【秀丸マクロ】ファイル保存時に行頭インデントだけをタブ文字に変更する【PHP・WordPress 対応】
【秀丸マクロ】ファイル保存時に行頭インデントだけをタブ文字に変更する【PHP・WordPress 対応】

 

 
読了目安:555

Are you want to translate this page to English? Please click this link to translate via ‘©Google Translate'!

ganohr.net favicon

みなさんこんにちは、ガノー(Twitter:Ganohr)です。

秀丸エディタは近年目まぐるしい進化を遂げており、コーディングに用いる方々が徐々に増えてきています。

 

当方は以下の記事で紹介している通り、WordPressのプラグインやテーマ開発のために、秀丸エディタの環境を最近整備し始めました。

これまではAtomやSublime Text、VSCodeなどを利用してきましたが、比較的軽量でカスタマイズし易く、また自動補完機能の実装やテンプレート機能の実装により他のエディタと遜色ないコーディングが可能になりつつあります。

サムネイル秀丸用PHP関数引数付きスニペットを公開します最近もっぱらWordPressのプラグイン開発やテーマ改造の仕事ばかりしています.そんななか『秀丸エディタ』にテンプレート機能―いわゆるスニペット機能が搭載されました.WordPressの開発には『PHP』を用いる必要があります.PHPは比較的古参のプログラミング言語であり言語仕様は比較的分かりやすいのですがいかんせん関数の数が多く且つ引数の順序などが整理されておらず厄介です.例えば配列から値を探し該当するキーを返却するarray_searchと文字列から文字列を検索しその位 ... 続きを読むganohr.net2022-09-12 サムネイル【秀丸】PHP用ハイライト定義を公開!PHP関数・WordPress関数や構文を分かりやすく強調!WordPressのプラグイン開発やテーマ改造の仕事ばかりでちょっと飽きが来たのでATOMから秀丸エディタにPHPのエディタを乗り換えようと準備をしています.前回は『PHP』のコードスニペットをオリジナルで作成しました.最新のPHP8.1.x対応で関数の候補に日本語のヘルプが表示され候補から実際に関数を呼び出す段階では引数の名前とその型もわかります.大分既存の開発環境よりも使いやすくカスタマイズできたのですが私が長年のATOMを利用していた理由であるヒアドキュメントや'~'中 ... 続きを読むganohr.net2022-09-12

 

最近はPHPMDやphpcs/phpcbfなどを秀丸マクロから呼び出し可能にしたため、より一層移行を加速しつつあります。

ただ、私がphpをやる主な理由がWordPress関連の開発です。

そこで結構困るのが秀丸の保存時のスペースタブ変換の微妙さ加減です。なぜなら秀丸は「ファイル保存時に、スペースの連続をタブに変換する機能を持っているが、行頭インデントのみならず、行内のスペースの連続までタブに変換してしまう」という挙動を行うことです。

 

特にPHPプログラミングにおいて標準とされるコーディングスタイル――PSR――では行頭インデントはスペースを用いることとなっていますが、「WordPressのコーディングルールでは行頭インデントはタブ文字で行うことが推奨」されています。

そのためコーディングスタイルはWordPressをベースに採用してphpcs/phpcbfを調整しているため、行頭インデントはタブにする方が都合が良いです。

サムネイルPHP Standards Recommendations - PHP-FIGWe're a group of established PHP projects whose goal is to talk about commonalities between our projects and find ways we can work better together. ... 外部サイトへアクセスwww.php-fig.org サムネイルPHP Coding Standards | Coding Standards Handbook | WordPress Developer ResourcesThese PHP coding standards are intended for the WordPress community as a whole. They are mandatory for WordPress Core and we encourage you… ... 外部サイトへアクセスdeveloper.wordpress.org サムネイルGitHub - squizlabs/PHP_CodeSniffer: PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards. - GitHub - squizlabs/PHP_CodeSniffer: PHP_CodeSniffer ... 外部サイトへアクセスgithub.com

 

そこで秀丸の「自動実行実行マクロ」でphpファイルを保存した際は、自動的に行頭のスペースによるインデントをタブへ置き換えるマクロを開発し、設定していきましょう

更新履歴
・2022/12/22 タブを変換した状態で保存がされなかった不具合を修正
・2022/12/05 タブ文字とスペースが混在しているときの処理を更新
・2022/11/28 公開

今回開発するマクロを採用する場合と採用しない場合、phpcs/phpcbfを適用した場合の違い

行頭が半角スペースでインデントされ内部に可読性向上のため半角スペースで位置合わせがされたphpコード
行頭が半角スペースでインデントされ内部に可読性向上のため半角スペースで位置合わせがされたphpコード

上記のコードを見てください。これは行頭が半角スペースでインデントされています。加えて、行内部でも前後の対応が分かりやすいよう、半角スペースで位置合わせがされています。

可読性向上のため行内部に半角スペースを入れ込み、前後の位置関係を整えるのはWordPressのコーディングスタイルでも許されています。

 

今回開発するマクロを適用した行頭のスペースによるインデントのみをタブに置き換えたphpコード
今回開発するマクロを適用した行頭のスペースによるインデントのみをタブに置き換えたphpコード

今回開発したマクロを採用してこのコードを保存すると、自動的に行頭の半角スペースのみをタブに置き換えてくれます。

 

しかし、phpcs/phpcbfにWordPressスタイルを追加してオートフォーマットを実行すると、以下のように行頭のスペースはタブに置換してくれますが、行内部に入れ込んだ意味のある半角スペースの連続が一つのスペースだけに除去されてしまいます。

これはコーダーにとっては致命的でしょう。

phpcs/phpcbfにてオートフォーマットをかけると行内部の意味のある半角スペースが除去されてしまう
行頭が半角スペースでインデントされ内部に可読性向上のため半角スペースで位置合わせがされたphpコードをphpcs/phpcbfにてオートフォーマットをかけると行内部の意味のある半角スペースが除去されてしまう

 

秀丸の保存時の半角スペースをタブに変換する機能はここまでひどいことにはなりませんが、行内の半角スペースまで変換するというわけの分からない仕様です。

秀丸の保存時に半角スペースをタブに置換する機能は、行頭以外の行内の半角スペースの連続までタブに変換してしまう
秀丸の保存時に半角スペースをタブに置換する機能は、行頭以外の行内の半角スペースの連続までタブに変換してしまう

 

これだと4タブ以外の環境で開くと、位置合わせが無意味になってしまいます。

もしもこれを、行頭のスペースのみをタブに置き換えるという――WordPressコーディングスタイル準拠――であれば、4タブでも8タブでも崩れることなく位置合わせされます。

WordPressのphpコーディングスタイル準拠のインデントなら、タブ幅の異なる別の環境でも位置合わせが正しい状態で表示される
WordPressのphpコーディングスタイル準拠のインデントなら、タブ幅の異なる別の環境でも位置合わせが正しい状態で表示される

 

秀丸のように文中の半角スペースの連続まで半角タブへ置き換えてしまうと第三者がコードを編集しようとした際に、タブ幅によっては位置合わせがずれてしまう。

4タブでコーディングされたphpファイルを8タブ環境で編集すると位置がずれる
4タブでコーディングされたphpファイルを8タブ環境で編集すると位置がずれる

 

WordPressのように、多数の開発者が組織や人種の別け隔てもなく参画していくものでは、可能な限り色々な環境でも正常に編集可能であることが求められます。

コードの著作権

このコードの著作権は放棄しておりません。このコードをウェブサイト等へ
コピーして貼り付けたり、再配布すること一切を禁止します。自身の環境や閉鎖的な環境、
プライベートな環境へ採用することは自由です。

マクロのダウンロード

ダウンロード

  • SaveSpaceToTab_003.zip
    秀丸の自動保存マクロとして登録することで、phpファイルを保存した際に行頭の半角スペースだけをタブへ置換できるマクロです。
    ダウンロード情報 File size: 1 KB Downloads: 8 File type: zip
ダウンロード情報の「Copy:File-Hash」について…

各ファイルの「Copy:File-Hash」にマウスカーソルを重ねると、今からダウンロードするファイルの、 「ファイルが公開された際のハッシュ値」を、SHA256で計算して表示します。

そのままタップしたり、マウスでクリックすると、そのハッシュ値をコピーできます。改ざんされたファイルをダウンロードしていないかチェックしたい場合にご活用下さい。

例えばファイルのダウンロード後に、7-zipなどのツールでダウンロードしたファイルの「CRC-SHA256ハッシュ値を計算し、 コピーした結果と同値であるかチェックする」ことにより、ファイル改ざんの有無を検証できます。このとき、大文字か小文字かの違いは、問題ありません。

なお、「もしもハッシュ値が異なっていた場合、お手数をおかけいたしますが、 作者のTwitter(Ganohr) までご報告ください」ますよう、お願いいたします。

phpファイル保存時に行頭のスペースインデントだけをタブに置き換える秀丸マクロ

    #tab_max = 40;

    setcompatiblemode 0x82010a;     if (   true         && filetype != ".php"         && filetype != ".js"         && filetype != ".css"         && filetype != ".mac"     ) {         endmacro;     }     disabledraw;     #x = x;     #y = y;     begingroupundo;     #tab = getconfig( "Tab" );     if ( #tab < 0 ) {         #tab = 0 - #tab;     }     $spaces = @"[ ]{" + str(#tab) + @"}";     $tabs = "";     #i = 0;     while (#i < #tab_max) {         replaceallfast "^" + $tabs + $spaces, $tabs + @"\t", nohilight, regular;         $tabs = $tabs + @"\t";         searchdown $tabs + $spaces, nohilight, regular;         if (!result) {             break;         }         #i = #i + 1;     }     replaceallfast @"[ \t]+$", "", nohilight, regular;     moveto #x, #y;     endgroupundo;     save;     enabledraw;

当該マクロを使用する際の推奨設定

当該マクロを使用する際は、秀丸のメニューから「その他→ファイルタイプ別の設定」から「その他→保存・読込み→保存するときの変換→タブ・空白の変換→変換なし」を選んでおいてください。

当該マクロを利用するときの推奨設定
当該マクロを利用するときは、ファイル保存時のタブ・空白変換を解除しておいて下さい。

ダウンロードしたマクロを秀丸の自動保存マクロへ登録する方法

zipファイルを解凍して得られたSaveSpaceToTab.MACを、%AppData%\Hidemaruo\Hidemaru\Macro\へ保管して下さい。

 

次は秀丸のメニューから「マクロ→マクロ登録」と選択し、「自動起動」を選択後「自動起動マクロを有効にする」のチェックを入れ、「保存直前と直後」にチェックを入れ、保存した「SaveSpaceToTab.MAC」を選択し、「OK」をクリックして下さい。

これでphpファイルを編集して保存すると、自動的に行頭の半角スペースだけをタブへ自動的に置換できます。

秀丸へダウンロードしたマクロを登録する手順
秀丸へダウンロードしたマクロを登録するには、「マクロ」メニューから「マクロ登録」を選択します
秀丸へ自動起動マクロを登録する手順
秀丸へ自動起動マクロを登録する際は、「自動起動→自動起動マクロを有効にする→保存直前と直後→マクロファイル選択」の順に操作し、「OK」を押すだけ

制限事項

このマクロは行頭のインデントにおいて「タブと空白が混在している場合」、全てをタブに置き換えることが出来ません。

このマクロが置換できるのは「タブ幅と同じ空白が連続しているものの混在」です。

 

運用上、現在の実装のほうが柔軟で高速なため、この制限ありバージョンを採用しています。

最後に

秀丸は色々と一歩足りないところが多いのですが、マクロや強調表示をカスタマイズできるため自分好みの環境を作れます。

今回のマクロは簡単ですが、色々と応用が効きますので、これを参考にしてオリジナルの環境を構築していく手がかりにしてくだされば幸いです。

以上、ガノーでした!

WordPressの不具合対応/カスタマイズ¥15,000~

PC歴25年超、SE歴10年超、WordPress運営歴7年超、WordPressエンジニア歴5年超のスキルとノウハウを提供します

当サイト管理人の「ガノー」(Ganohr)は、日本最大手且つ東証一部上場企業が運営するクラウドソーシングサイト『Lancers』にて、認定ランサーとして活動しています。


※ 認定ランサーとはLancersにより様々な能力 ( 高い仕事遂行率・高い顧客満足度・多くの実績、など ) を評価したプロフェッショナルを認定する制度です。

 

秀丸マクロカテゴリの最新記事