Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

phpファイル保存時にLint処理(php -l)を行ない、エラーがあればQuickFixに表示するプラグインを作ってみた。

$
0
0

はじめに

phpファイル保存時にLint処理(php -l)を行ない、エラーがあればQuickFixに表示するプラグインを作ってみました。
(多分もう世の中にあると思いますが。。。)
今まではプラグインを使用することはあっても、自力でvimのプラグインを作成することはなかったので、まずは簡単なものから。。。
勉強中なのでもっとよいものが書けるように頑張ります。
一応githubにのせてます
もし何かのお役に立てば幸いです。
https://github.com/MasaharuSuizu/vim-php-lint

インストール方法 & 使い方

詳しくは
https://github.com/MasaharuSuizu/vim-php-lint
に載せています。
一応、日本語と頑張って英語でも書きました。

本当はプラグインにしなくてもいいんですけどね。。。

たいした内容ではないので、.vimrcに下記をコピペすれば同じことができます。
コメントも載せておきます。

.vimrc
augroup PHP
    autocmd!    " 書き込みのプレ処理autocmdBufWritePre *.php call PHPPre()    " 書き込みのポスト処理autocmdBufWritePost *.php call PHPPost()    " 書き込みのプレ処理function PHPPre()endfunction    " 書き込みのポスト処理    " PHPLint    " コードの整形function PHPPost()        " php -lの実行結果を変数に代入let Lint_Result = system(&ft . ' -l ' . bufname(""))        " No syntax errorsの文字列がmatchするかチェックlet Match_Result = matchstr(Lint_Result,'No syntax errors')        " エラーがあるときだけLintの結果を出力するif len(Match_Result)==0            " 半角スペースごとに配列を分割let splitErrorMsg = split(Lint_Result,' ')let lineFlg =0let lineNumber =0            " エラーメッセージからエラーの行数を拾う            " エラーメッセージのlineの後がエラーの行数みたいfor word in splitErrorMsg
                if lineFlg ==1let lineNumber = word
                    :breakelseif word =='line'let lineFlg =1endifendifendfor            " QuickFixのリストの末尾にエラーの内容を追加するlet qflist = []
            call add(qflist, {'filename': bufname(""),'type': 'i','lnum': lineNumber,'col': 1,'text': Lint_Result})call setqflist(qflist)            " QuickFixを表示
            :copenelse            " QuickFixを閉じる
            :ccloseendifendfunction
augroup END

php_cs_fixerプラグインやtagファイルを使われている方へのおまけ

本当は、自身の.vimrcではphp_cs_fixerプラグインとの連携や、
tagファイルの自動更新処理(コマンドたたいているだけですが。。。)
とも連携させています。
それもコードを載せておきます。
これも何かのお役に立てば幸いです。
tagファイルのパスは変えてくださいね

.vimrc
" ---------------------------- PHP用の設定 ----------------------------
augroup PHP
    autocmd!    " 書き込みのプレ処理autocmdBufWritePre *.php call PHPPre()    " 書き込みのポスト処理autocmdBufWritePost *.php call PHPPost()    " 書き込みのプレ処理function PHPPre()endfunction    " 書き込みのポスト処理    " PHPLint    " コードの整形function PHPPost()        " php -lの実行結果を変数に代入let Lint_Result = system(&ft . ' -l ' . bufname(""))        " No syntax errorsの文字列がmatchするかチェックlet Match_Result = matchstr(Lint_Result,'No syntax errors')        " エラーがあるときだけLintの結果を出力するif len(Match_Result)==0            " 半角スペースごとに配列を分割let splitErrorMsg = split(Lint_Result,' ')let lineFlg =0let lineNumber =0            " エラーメッセージからエラーの行数を拾う            " エラーメッセージのlineの後がエラーの行数みたいfor word in splitErrorMsg
                if lineFlg ==1let lineNumber = word
                    :breakelseif word =='line'let lineFlg =1endifendifendfor            " QuickFixのリストの末尾にエラーの内容を追加するlet qflist = []
            call add(qflist, {'filename': bufname(""),'type': 'i','lnum': lineNumber,'col': 1,'text': Lint_Result})call setqflist(qflist)            " QuickFixを表示
            :copenelse            " QuickFixを閉じる
            :cclose            " php_cs_fixerを利用してコードを整形call PHPCs()            " tagファイル更新call UpdateCtags()endifendfunction    " php_cs_fixerプラグインの設定function PHPCs()        " If php-cs-fixer is in $PATH, you don't need to define line belowletg:php_cs_fixer_path ="/usr/local/bin/php-cs-fixer"" define the path to the php-cs-fixer.pharletg:php_cs_fixer_level ="psr2"" which level ?letg:php_cs_fixer_config ="default"" configuration        "let g:php_cs_fixer_config_file = '.php_cs'   " configuration fileletg:php_cs_fixer_php_path ="php"" Path to PHP        " If you want to define specific fixers:letg:php_cs_fixer_fixers_list ="linefeed,short_tag,indentation"letg:php_cs_fixer_enable_default_mapping =1" Enable the mapping by default (<leader>pcd)letg:php_cs_fixer_dry_run =0" Call command with dry-run optionletg:php_cs_fixer_verbose =0" Return the output of command if 1, else an inline information.
        :call PhpCsFixerFixFile()syntaxonendfunction    " Ctags自動生成処理function UpdateCtags()        " 外部コマンドを叩く
        :call system('ctags -R /var/www/html 2> /dev/null && mv ./tags  /var/www/')endfunction
augroup END

将来的には連携したものをgithubに載せる予定です。

わてくしの他の記事の紹介

vimをIDEっぽくしたいなぁ1 ~クラスや関数の宣言元にF3ボタンで別タブを開きジャンプする~

vimをIDEっぽくしたいなぁ2 ~taglistを使いメソッド、変数、定数の一覧を表示する~

vimをIDEっぽくしたいなぁ3 ~nerdtreeを使い、vimを開いた状態でディレクトリをツリー表示、そこから別ファイルに飛んじゃおう~

vimをIDEっぽくしたいなぁ4 ~function,switch,foreachをテンプレファイルにしておいて、ワンタッチで呼び出す。あ、.vimrc使います~

vimをIDEっぽくしたいなぁ5 ~vimを開いたまま再帰的なgrepをしてプロジェクト内のファイル検索。検索結果一覧から目的箇所へジャンプしましょう。あ、ちゃんと別タブで開きます。~

vimをIDEっぽくしたいなぁ6 ~SublimeTextのように行またぎの選択(multiple selection)を可能にするvim-multiple-cursorsを導入してみよう~

vimをIDEっぽくしたいなぁ7 ~自動コマンドを活用しよう。たまにはvimscriptを書くか。行末のスペース削除や構文チェック~


Viewing all articles
Browse latest Browse all 5608

Trending Articles