Сниппеты в Sublime Text 2 для Symfony2 и Ruby on Rails

Сергей Лунёв — Feb 07, 2013    workflow

В своей работе мы стремимся к тому, чтобы допускать минимум ошибок и при этом нажимать как можно меньше кнопок. К сожалению, последнее часто затруднительно. Посмотрим, например, на самый простой контроллер в Symfony 2:

namespace App\DefaultBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

/**
 * @Route("/path")
 */
class name extends Controller
{
    /**
    * @Route("/path", name="name")
    * @Template()
    */
    public function indexAction()
    {
        return array();
    }
}

Код, в общем-то, предельно простой, но чтобы его написать, требуются довольно большие усилия, несоизмеримые с тем, что мы получаем в итоге (да, мы ленивые парни).

Есть варианты. Например, можно копировать нужные нам куски кода из какого-нибудь другого места: соседнего контроллера или с сайта документации. Но, во-первых, это работает лишь для части кода. Во-вторых, для этого нужно открывать другие файлы или сайт. Еще больше действий.

Многие из нас в Evercode Lab используют Sublime Text 2 в качестве основного редактора. У нас даже есть отдельная страница в нашей книге знаний, посвященная Sublime Text 2. И для решения вышеописанной проблемы пользователи Sublime используют сниппеты - небольшие куски кода, пригодные для повторного использования.

Мы сделали набор сниппетов для Ruby on Rails и Symfony2, ну и еще немного для JavaScript и jQuery. И, конечно же, выложили получившийся набор в открытый доступ, чтобы любой желающий мог воспользоваться благами цивилизации!

Использовать сниппеты очень просто. Мы набираем необходимую строчку-алиас, например, sf-controller (что соответствует контроллеру для Symfony2), после чего нажимаем или на tab, или на ctrl-space. И коротенькая строчка текста превращается в необходимый нам кусок кода. Передвижение по placeholder’ам в получившемся коде осуществляется с помощью клавиши tab. Вот, в общем-то, и все, что можно рассказать об использовании данного инструмента.

Полный список используемых сниппетов, можно найти в README.

На данный момент возможен только один вариант установки: с помощью клонирования репозитория в папку с Sublime. Хотя в скором будущем этот набор снипетов мы хотим добавить в Package Controll.

Установка для OS X делается с помощью данной команды:

git clone git@github.com:EvercodeLab/sublime2-snippets.git ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/EvercodeSnippetPack

Для linux:

git clone git@github.com:EvercodeLab/sublime2-snippets.git ~/.config/sublime-text-2/Packages/EvercodeSnippetPack

Полный список используемых сниппетов, можно найти в README к пакету, так что на нём останавливаться мы не будем. Использование сниппетов так же абсолютно простое. Мы набираем необходимую строчку (например sf-controller, что соотвествует контроллеру для Symfony2), после чего нажимаем или на tab или на ctrl-space и коротенькая строчка текста превращается в необходимый нам кусок кода. Передвижение по place holder’ам в получившемся коде осуществляется с помошью клавиши tab.

Чтобы представить более наглядно, покажем, что из себя представляет сниппет. Для примера возьмём всё тот же sf-controller.

<snippet>
    <content><![CDATA[
namespace ${1:App}\\${2:Default}Bundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

${3:/**
* @Route("${4:/path}")
*/}
class ${TM_FILENAME/(.+)\..+|.*/$1/:name} extends Controller
{
    /**
     * @Route("${5:/path}"${6:, name="${7:name}"})
     * @Template()
     */
    public function ${8:index}Action()
    {
        ${0}
        return array(

        );
    }
}
]]></content>
    <tabTrigger>sf-controller-with-annotation</tabTrigger>
    <scope>source.php</scope>
    <description>Symfony 2 / Controller class for with annotations</description>
</snippet>

В теге content содержится само “тело” сниппета. ${1:App} это как раз и есть те самые плейсхолдеры. Цифра в них говорит о том, какой порядковый номер они имеют среди остальных плейсхолдеров. Если два имеют одинаковый номер, то они заполняются одинаковой информацией.

Одной из очень интересных особенностей сниппетов в сублиме является возможность использовать регулярные выражения для замены одного текста на другой текст. В нашем примере у нас имеется следующий момент ${TM_FILENAME/(.+)\..+|.*/$1/:name}, он отвечает за имя класса, которое в данном случае берется из имени файла, без расширения.

И еще два последних момента, которые стоит отметить: tabTrigger — показывает, какое сокращение нам необходимо набрать, чтобы мы моги использовать сниппет. scope — использутеся для обозначения, в каких файлах мы можем использовать данный сниппет. Если данный тег будет пустым, то в таком случае сниппет будет применяться во всех файлах.

Более подробную информацию о создании и возможностях сниппетов в Sublime Text 2 можно прочитать в неофициальной документации.

Приятного использования!

Evercode Lab

Close