修改Vim中的PHP_Beautifier以不剥离空行

时间:2011-10-31 11:08:53

标签: php vim syntax php-beautifier

刚刚完成将PHP_Beautifier合并到Vim中,并且它删除了空白让我烦恼的事实。显然自2007年以来它是bug。有一个hack来解决这个问题,但它会导致其他问题。相反,我决定使用圆形方法。

首先通过建议的here

命令将多个空行转换为一个空行
: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

当我独立测试它们时,所有四个工作。我还将第三步映射到我的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>

我收到以下错误

Error detected while processing /home/xxx/.vimrc:
line  105:
E749: empty buffer

E482: Can't create file /tmp/vZ6LPjd/0
Press ENTER or type command to continue

如何将这些多个命令绑定到一个键,在本例中为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>

1 个答案:

答案 0 :(得分:1)

对于某些Ex命令,包括:global:!,条形符号(|)是 被解释为命令参数的一部分(完整见:help :bar 列表)。要链接两个命令,第一个命令允许在其中使用条形符号 参数,使用: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