Только что завершил включение 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>