【Vim】php-cs-fixer
問題
簡単な導入手順を教えて
答え
php-cs-fixer は、phpをルールに沿って指摘したり整形したりしてくれるツール。
まず、vimと関係なく php-cs-fixer コマンドが使えるようにする。
composer の場合、global でインストールして $HOME/.config/composer に入れるならこう
composer global require friendsofphp/php-cs-fixer → ~/.config/composer/vendor/bin/php-cs-fixer に入る
composerのはphpで書かれたもので、composer管理下に置いておかないとautoload が効かなくてエラーになる。
composer でインストールした php-cs-fixer は /usr/local/bin/php-cs-fixer でリンクを作っておくか、~/.config/composer/vendor/bin にPATHを通しておくと便利。
単体で動く phar を取得してもよい
wget https://cs.symfony.com/download/php-cs-fixer-v3.phar -O php-cs-fixer chmod a+x php-cs-fixer mv php-cs-fixer /usr/local/bin/
使えるようになったのを確認
~/.config/composer/vendor/bin/php-cs-fixer --version
PHP CS Fixer 3.8.0 BerSzcz against war! by Fabien Potencier and Dariusz Ruminski.
PHP runtime: 8.0.15
php-cs-fixer fix test.php --rules=@PhpCsFixer → test.php が修正される
では、vimで使えるようにする。
プラグイン vim-php-cs-fixer を入れる。
Vim8以降は所定の場所にプラグインを置くとそれだけで使える(packages)。プラグイン管理のVundleやPathogenがなくても置くだけで使える。
packages のルールに従うなら、以下に配置。
~/.vim/pack/(好きな名前)/start/vim-php-cs-fixer/
以下のように git clone する感じ
git clone https://github.com/stephpy/vim-php-cs-fixer.git ~/.vim/pack/(好きな名前)/start/
以上で使えるようになる。
素の状態なら、vimでphpファイル編集中に以下コマンドでphp-cs-fixer できる。
:call PhpCsFixerFixFile()
コマンドが長いから短縮したいとか、保存時に自動修正してほしいときは、こちらのガイドの通り、~/.vimrc などに追記する。
保存時の自動修正(.vimrc に書く)
autocmd BufWritePost *.php silent! call PhpCsFixerFixFile()
思ったように修正されないときは、ルールを指定する。
.vimrc ではルールセットの指定ができる。
let g:php_cs_fixer_rules = "@PSR2"
もう少し複雑なルールを設定したいときは以下でconfigファイルを指定するとよい。
let g:php_cs_fixer_config_file = '/home/xxxx/.php_cs'
phpで設定を書く(例)
<?php $config = new PhpCsFixer\Config(); return $config ->setRules([ '@PhpCsFixer' => true, "no_superfluous_elseif" => false, "no_useless_else" => false, "concat_space" => [ "spacing" => "one" ], "array_syntax" => [ "syntax" => "long" ], "yoda_style" => false, "blank_line_before_statement" => false, "visibility_required" => false ]); ->setIndent("\t") ->setLineEnding("\n");
.php-cs-fixer.cache というファイルがあちこちにできるのがイヤだったら場所を指定できる。
let g:php_cs_fixer_cache = "/どこか/別の/場所/.php_cs.cache"
コメント