Измените PHP_Beautifier в Vim, чтобы не убирать пустые строки - PullRequest
2 голосов
/ 31 октября 2011

Только что завершил включение PHP_Beautifier в Vim, и тот факт, что он удаляет пробелы, раздражает меня.Очевидно, это ошибка с 2007 года. Существует хак , чтобы решить эту проблему, но это приводит к другим проблемам.Вместо этого я решил использовать метод округления.

Сначала преобразуйте несколько пустых строк в одну пустую строку с помощью команды, как это было предложено здесь

: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 Ответ

1 голос
/ 31 октября 2011

Для некоторых команд 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...