2

PHP_BeautifierをVimに組み込み終えたばかりで、空白が削除されるという事実は私を苛立たせます。どうやらそれは2007年以来のバグです。この問題を修正するためのハックがありますが、それは他の問題につながります。代わりに、ラウンドアバウト方式を使用することにしました。

まず、ここで提案されているコマンドを使用して、複数の空白行を1つの空白行に変換します

:g/^\_$\n\_^$/d

次へすべての空白行をそのようなユニークなものに変換します(美化中に変更されないようにしてください)

:%s/^[\ \t]*\n/$x = 'It puts the lotion on the skin';\r/ge

次にPHP_Beautifierをそのように呼び出します

:% ! php_beautifier --filters "ArrayNested() IndentStyles(style=k&r) NewLines(before=if:switch:foreach:else:T_CLASS,after=T_COMMENT:function)"<CR>

最後に、すべての一意の行を次のように空の行に戻します

:%s/$x='It puts the lotion on the skin';//ge

私がそれらを個別にテストしたとき、4つすべてが機能します。3番目のステップもF8キーにマッピングされています

map <F8> :% ! php_beautifier --filters "ArrayNested() IndentStyles(style=k&r) NewLines(before=if:switch:foreach:else:T_CLASS,after=T_COMMENT:function)"<CR>

しかし、パイプ記号を使用してコマンドをつなぎ合わせようとすると、次のようになります(さまざまなコマンドをわかりやすくするために、パイプに空白を埋め込みました)

map <F8> :g/^\_$\n\_^$/d    |    %s/^[\ \t]*\n/$x = 'It puts the lotion on the skin';\r/ge      |      % ! php_beautifier --filters "ArrayNested() IndentStyles(style=k&r) NewLines(before=if:switch:foreach:else:T_CLASS,after=T_COMMENT:function)"     |     %s/$x = 'It puts the lotion on the skin';//ge<CR>

次のエラーが発生します

/home/xxx/.vimrcの処理中にエラーが検出されました:
105行目:
E749:空のバッファ

E482:ファイル/ tmp / vZ6LPjd/0を作成できません
ENTERを押すか、コマンドを入力して続行します

これらの複数のコマンドをキー(この場合はF8)にバインドするにはどうすればよいですか。


ibの答えのおかげで、私はついにこれを機能させることができました。誰かがこれと同じ問題を抱えている場合は、このスクリプトを.vimrcファイルにコピーするだけです。

func! ParsePHP()
    :exe 'g/^\_$\n\_^$/d' 
    :%s/^[\ \t]*\n/$x = 'It puts the lotion on the skin';\r/ge
    :exe '%!php_beautifier --filters "ArrayNested() IndentStyles(style=k&r)"'
    :%s/$x = 'It puts the lotion on the skin';//ge 
endfunc

map <F8> :call ParsePHP()<CR>
4

1 に答える 1

1

:globalおよびを含む一部のExコマンドで:!は、バー記号(|)がコマンドの引数の一部として解釈されます(:help :bar完全なリストについては、を参照してください)。2つのコマンドをチェーンするには、最初のコマンドで引数にバー記号を使用できます:execute。コマンドを使用します。

:exe 'g/^\_$\n\_^$/d' |
\   %s/^[\ \t]*\n/$x = 'It puts the lotion on the skin';\r/ge |
\   exe '%!php_beautifier --filters "ArrayNested() IndentStyles(style=k&r) NewLines(before=if:switch:foreach:else:T_CLASS,after=T_COMMENT:function)"' |
\   %s/$x = 'It puts the lotion on the skin';//ge
于 2011-10-31T13:22:16.357 に答える