{{Laracast Vim Mastery, 22, PHP Documentor and Ultisnips, 18.03.2016, 11.07.2016, https://laracasts.com/series/vim-mastery/episodes/22}} (0:00) Давайте поговорим о том, как мы обращаемся с docblocks (комментариями). Например, простой класс %%Authenticate%% в Lavarel. Представьте, что тут не было бы этого комментария. И вы должны были бы создать его вручную. Вот так: %%(t)@param Request $request%% и потом снова... Кошмар. Давайте найдем способ автоматизировать это насколько возможно. Есть плагин PHP Documentor для Vim, который отлично справится с этим. Возьмем это. Переключимся в наш файл %%(t)plugins.vim%%. (0:30) И затем внизу добавим это. Однако, до установки этого плагина, если мы переключимся назад, вы увидите, что также должен быть установлен плагин %%(t)vmustache%%. Поэтому давайте возьмем также его. Теперь я переключусь в свой файл %%(t).vimrc%%. Сохраню его, перезагружу этот файл и выполню %%(t):PluginInstall%%. Хорошо, давайте посмотрим. Закроем это и посмотрим, какой следующий шаг. (1:00) Если я переключусь обратно, можно увидеть... хорошо, мы установили его. Но теперь вы должны создать папку %%(t)pdv_template_dir%%, которая указывает на ваши шаблоны. Тут есть пример. Давайте перенесем это в %%(t).vimrc%% и вставим, например, сюда. Хорошо. Мы указываем папку, где должны быть расположены наши шаблоны. То, что по умолчанию, подходит. Далее, что мы делаем, так это... Установим сочетание для %%(t)d%%. (1:30) Однако, это пока не заработает. К примеру, я нахожусь здесь и нажму %%(t),d%%, заметьте, мы получаем ошибку “Неизвестная функция UltiSnips”. Мы видим тут, если мы хотим использовать автоподстановку по Tab и все такое для docblocks, он требует наличие инструмента UltiSnips. Мы уже познакомились с одним пакетом сниппетов, называемом snipmate, но другой, такой же популярный, называется UltiSnips. И вам он может понравиться даже больше. Если это окажется необходимым, вы можете даже удалить snipmate. Это нормально. (2:00) Это означает, что мы должны скопировать этот адрес. Вернемся в наш файл %%(t)plugins.vim%%. Добавлю это внизу. И повторим. Сохраним и выполним установку. Хорошо, закроем все лишнее. Теперь давайте попробуем снова: %%(t),d%% и готово. Пишем: %%(t)Handle authentication%%. Теперь, вы можете видеть, как умно плагин читает аргументы в любых вариациях и применяет их тут. Как это, по сравнению с тем, что было раньше? (2:30) Поместите курсор на метод, %%(t)d%%, напишите свое описание и, в основном, все готово. Но, что касается UltiSnips, проверим-ка... Если мы сделаем так: %%(t)UltiSnips%% и далее я просто продолжу нажимать Tab, передвигаясь по предложенным командам, вы увидите ту, которая называется %%(t)UltiSnipsEdit%%. Команда откроет специальный файл с вашими сниппетами для текущего типа файла. Например, если я сохраню файл, обратите внимание, он назван %%(t)php.snippets%%. (3:00) Это потому что текущий файл является файлом для PHP. Когда я выполняю эту команду, она знает, что я ищу сниппеты для PHP. Давайте попробуем. Пишем: %%(t)snippet%% и %%(t)endsnippet%%, и дальше просто напишем “это тест” и назначим горячую клавишу %%(t)test%%. Теперь, если я закрою этот файл, то могу ввести %%(t)test%%, Tab и автоподстановкой получу “это тест”. Но заметили ли вы, как мы получили дополнительный отступ? Попробуем еще раз: (3:30) %%(t)test%%, Tab - текст будет добавлен сюда. Это потому что... если я вернусь назад... Блок свернут, поэтому я нажму %%(t)zo%%, чтобы развернуть его... Нам нужно удалить этот отступ. Если мы сделаем это еще раз: %%(t)test%%, Tab - текст будет вставлен, как следует. Давайте сделаем другую. Что если, мы создадим %%(t)smet%% для статичного метода? Я могу написать %%public static function $1%% и далее (%%(t)$2%%) для аргументов и, наконец %%(t)$3%%. (4:00) Попробуем это. Переключусь назад и введу внизу %%(t)smet%%, Tab, %%(t)my function%%. Теперь я снова нажму Tab, чтобы перейти к следующей точке. Не работает. Он пытается сделать автоподстановку. Если мы переключимся в Chrome, чтобы посмотреть UltiSnips... Да, вы можете видеть, мы загрузили его. Если вы хотите дополнительные сниппеты, можете их добавить. Я никогда этого не делаю этого. Итак, мы можем сделать настройку. (4:30) Перейдем сюда, в мой файл %%(t).vimrc%%... давайте посмотрим. Я нажму %%Ctrl+U%% чтобы перейти чуть повыше. Примерно тут. %%(t)UltiSnips%% и вставлю это сюда. Разворачиваем сниппет по Tab. Для переключения вперед я также установлю Tab. А для переключения назад установлю Shift+Tab. И, кстати, это должно перейти наверх. Чтобы удостовериться, я просто выйду отсюда и зайду снова. Перейдем в наш класс %%Authenticate%%. (5:00) И теперь внизу я напишу %%(t)smet%%, Tab, %%(t)myfunction%%, Tab, %%(t)$arg%%, Tab... Вы поняли идею. Теперь я могу ввести Shift+Tab, чтобы переключаться между ними. Вот так. Хорошо. Эти команды помогут с функционалом сниппетов. Вы можете поменять snipmate на UltiSnips, если вы предпочитаете его. Как бы там ни было, вернемся к docblocks, они также под контролем. Сейчас я могу ввести Ctrl+D и он создаст блок документации за меня. (5:30) Напишем %%(t)Here is the description%%, Tab, это перенесет нас к типу... Здесь строка, может быть. Вы поняли основную идею. Теперь давайте удалим это. Введу заглавную %%(t)L%%, заглавную %%(t)D%%, заглавную %%(t)G%% и, далее, %%(t)k%%, чтобы перейти на строчку вверх, и введу %%(t)d%%. Если я введу %%(t)gg%%, чтобы перейти снова вверх... Теперь, если бы тут не было документации, мы могли бы создать ее очень просто: %%(t)d%%, %%(t)Handle authentication%% - готово. Или, если нам нужно изменить это, то нажмем Tab, %%(t)Illuminate\Http\Request%%. И также на забудьте, \мы назначили %%(t)pf%% для форматирования файла. Использование PSR-2 - это из урока, где мы устанавливали %%(t)php-cs-fixer%%. Хорошо, увидимся на следующем уроке.