vim script の勉強ついでに書いてみた。
実行したい行で <Leader>p って打つとその行を php として実行します。ビジュアルモードも対応してます。
システムコールで php -r に渡してるだけなので echo とか var_dump とかしないと何も表示されません。なのでちょっとしたPHPコードの動作確認とかに使います。もちろん php がインストールされてて path が通ってる必要があります。
例えば以下のコードの場合
if (true) {
var_dump(hoge);
} else {
var_dump(fuga); // ここでp とすると string(25) "fuga" と出力
}
// 全選択でp とすると string(25) "hoge" と出力
以下ソース。getline('.') で取ってきたのをそのまま渡してやればいいじゃんって思ってたが ' と " を考えないといけない。めんどい。
function! PhpRun()
let s = getline('.')
let s = substitute(s, '"', '\"', 'g')
echo system("php -r \"" . s . "\"")
endfunction
command! PhpRun :call PhpRun()
function! PhpRunVisual()
let tmp = @@
silent normal gvy
let s = @@
let @@ = tmp
let s = substitute(s, '"', '\"', 'g')
echo system("php -r \"" . s . "\"")
endfunction
command! PhpRunV :call PhpRunVisual()
nnoremap p :call PhpRun()
vnoremap p :call PhpRunVisual()
バグ
エスケープ処理が適当なので \" とか使うと以下のようなエラーが出る。
var_dump("\""); // PHP Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in Command line code on line 1
めんどうだしあんまりそういうの使わないので放置。
おまけ
僕が .vimrc に書いてる php 関連の設定。数は多くないけどちょっと便利になる。
" for php
let php_sql_query = 1
let php_htmlInStrings = 1
let php_noShortTags = 1
map :!php -l "%" " Syntax check