(Пере)форматирование кода PHP в Vim

Как мне отформатировать PHP-код, который выглядит так

class SomeClass
{
    function insideclass()
    {


    }
} 

в это, используя Vim без каких-либо внешних инструментов?

class SomeClass {
    function insideclass() {


    }
} 

Я не утверждаю, что это лучший способ форматирования кода, но это то, за чем мы следуем в команде.

Изменить: удалена ссылка на надстройку фрагмента, что вызвало некоторую путаницу в вопросе.


person Sudar    schedule 12.04.2012    source источник


Ответы (3)


У вас есть две несвязанные проблемы, и вы не найдете уникального решения для обеих.

  1. Вам не нравится фрагмент class по умолчанию.

    Без проблем. Если его еще нет, создайте ~/.vim/snippets/php.snippets и настройте его в соответствии с правилами вашей команды, следуя другим ответам. Snipmate недостаточно умен, чтобы адаптироваться к вашему стилю кодирования.

  2. Некоторые из ваших существующих кодов не соответствуют вашим правилам написания кода.

    Snipmate вообще не поможет, поскольку он имеет дело только с вставкой, а не с преобразованием. Вам понадобится либо какой-нибудь внешний beautifier, либо несколько макросов.

    ИЗМЕНИТЬ

    Вот очень простая команда, которая делает именно то, что вы хотите в вашем примере. Я не даю никаких гарантий, что это будет работать для всего и везде. Примите это как наивную отправную точку.

    :g/^\s*{\s*$/normal kJ
    
    • :g/pattern действует на все строки, содержащие pattern, см. :h :global.

    • ^\s*{\s*$ соответствует всем одиночным { независимо от количества пробелов между ними и началом строки.

    • normal выполняет normal команд, см. :h :normal.

    • kJ поднимается на одну строку вверх и Jсоединяет эту строку с соответствующей строкой.

    • Готово.

    ЗАВЕРШИТЬ ИЗМЕНЕНИЕ

person romainl    schedule 12.04.2012
comment
На самом деле мой вопрос больше касался второй проблемы. Я просто вырезаю аддон в качестве примера. Виноват. Я отредактировал вопрос сейчас, чтобы уточнить его. - person Sudar; 12.04.2012
comment
Помимо использования beautifier, есть ли решение второй проблемы на основе Vim? - person Sudar; 12.04.2012
comment
Я не знаю готовых решений. Может быть, кто-то написал скрипт на основе PHP_Beautifier? Я не знаю. Это похоже на типичный пример использования макросов и подстановок. - person romainl; 12.04.2012
comment
+1. Я знал, что kJ было самым простым решением, но не знал, как выполнить его при обнаружении совпадения. Спасибо! - person Pavan Manjunath; 12.04.2012
comment
Ух ты!! это было именно то, что я искал. Простой и элегантный. Я собираюсь сопоставить его с легко запоминающимся ключом в моем .vimrc. - person Sudar; 12.04.2012

Почему бы не изменить исходный код этого дополнения?

Например, измените это:

snippet class
    /**
     * ${1}
     */
    class ${2:ClassName}
    {
        ${3}
        function ${4:__construct}(${5:argument})
        {
            ${6:// code...}
        }
    }

to

snippet class
    /**
     * ${1}
     */
    class ${2:ClassName}{
        ${3}
        function ${4:__construct}(${5:argument}){
            ${6:// code...}
        }
    }
person hellotli    schedule 12.04.2012
comment
Да, изменение аддона, безусловно, вариант. Я просто пытаюсь понять, можно ли вообще преобразовать код из одного стиля в другой. - person Sudar; 12.04.2012

Все фрагменты snipmate хранятся в каталоге. Перейдите в этот каталог и отредактируйте нужный файл.

Каталог хранится в каталоге vim и называется snippets. Там вы видите файл php.snippets. Перейдите к этому файлу и в строке 70 вы можете отредактировать фрагмент для класса.

person Wouter J    schedule 12.04.2012