VimでPHPファイルにHTMLを書くとインデントがおかしくなる問題の解決策
僕は業務でWordPressを触ることもまあまあ多いのですが、VimでPHPファイルにHTMLを書くとautoindentやsmatindentを設定しているにも関わらずインデントが効かなくなる現象が発生しました。
Laravelのbladeとか、PHPですらありませんがJSXとかは普通にオートインデントが効くのに、何で生のPHPはオートインデントが効かないのか...イミわかんないってなったので、昼休みに調べて解決した記録を備忘録として残しておくことにしました。
原因
Vimには編集しているファイルの拡張子を検出することができる機能があるらしいのですが、PHPにHTMLをベタ書きすると「今開いているファイルはPHP。。。HTML知らんわ!」みたいな感じになって、HTMLを認識できず、インデントが効かなくなるらしいです。
http://musou1500.blog.jp/archives/114685.html
もう7年以上前、、、2020年現在は特に何も設定しなくてもインデントが効くbladeでオートインデントが効かない現象が発生したらしいです。
解決策
解決する方法は非常に簡単でした。
下記のページに沿ってコードを貼り付けて、.vim/indent/php.vim
で読み込ませるだけです。
→indentディレクトリは、vimのインデントの設定を配置するディレクトリなので、それを上書きするイメージでしょうか?
https://vim.fandom.com/wiki/Betterindentsupport_for_php_with_html
This script allows you to indent HTML sections in PHP files.
URL先のページには、PHPファイルでHTMLのインデントが効くようになるみたいなことが書かれていました。
求めてたのはこれだと思い、試しに下記のコードを貼り付けた結果、PHPファイルにHTMLを書いても無事オートインデントが効くようになりました。
参考にさせていただいた記事が作成されたのは何と2006年、僕が小学生の頃に投稿された記事です。
もはや、古いを通り越して化石のような記事ですが無事動いてよかったです。
文面だけではわかりづらいかもしれないので、僕の環境のスクショも一緒に貼り付けておきます。
まとめ
では短いですが、まとめです。
- Vimには、開かれたファイルの形式を検知することができる機能がある
- indentディレクトリ配下にスクリプトを配置することで、インデントの設定を上書きできる
- VimでWordPressを触るような人は設定しておいた方がいいかも!?
おまけ
Vim系の記事は、3ヶ月くらい前にVimでLaravelを触ったらCOCがUndefined type 'Route'エラーを吐いたのでその対処法
という記事を書いたのですが、Google Search Consoleで見ると今まで投稿した記事の中でぶっちぎりで表示回数が多くて笑いましたw
→次点がWordPressのWP_Queryの使い方について解説した記事。
やはり、ニッチな記事の方が需要あるということなのでしょうか。。。
ニッチな記事は書こうと思ってもなかなか書けるものではないので難しいものです。。
今回の記事はまあまあニッチな記事なので、ちょっと伸びんじゃね!?と密かに期待しています。