Сегодня будем говорить о некоторых возможностях замечательной IDE PhpStorm. Программисты из компании Jetbrains вкладывают огромные силы в создание своего продукта, в результате мы имеем мощную и одну из лучших IDE для языка программирования php. Думаю времена, когда хотелось выделиться программированием в Notepad++, практически ушли. Разрабатывать на коленке современные большие проекты с множеством файлов крайне затруднительно без хорошего инструмента.

Все hotkeys справедливы для Windows и думаю Linux версии, «Макосники» могут найти комбинации клавиш в соответствующем разделе настроек IDE


Итак, поехали:

  1. Search Everywhere. Двойное нажатие клавиши Shift вызывает popup окно для поиска чего угодно и где угодно. Достаточно написать фрагмент искомого текста, и наша пчелка трудяга найдет вхождения, причем сгруппирует их в категории. Фрагменты, найденные в классах, файлах, символах и даже элементах меню. Быстро и удобно, не правда ли?
    Search Everywhere в действии
    image

  2. Поиск в окне. Находясь в окне со списком файлов проекта (Project), мы просто начинаем писать имя файла или папки, которое хотим найти. Найденные файлы и папки весьма недвусмысленно выделяются в списке. Клавишами вверх и вниз осуществляется навигация по результатам поиска.
    Поиск в окне в действии
    image

  3. Выход из настроек IDE клавишей Esc. Находясь в настройках, мы можем быстро закрыть окно нажав клавишу Esc, то есть нам не обязательно трогать мышь, пусть себе отдыхает.
  4. Навигация по инспекции кода. Справа от нашего кода, мы видим результат фоновой инспекции кода. IDE подсказывает нам об ошибках и неточностях в файле. Осуществлять навигацию между этими ошибками и замечаниями можно клавишей F2
    Навигация по инспекции кода в действии
    image

  5. Последние открытые файлы. Ctrl+E открывает popup окно с файлами, которые мы недавно открывали. Так же в этом окне можно начать писать имя интересующего нас файла, и IDE отфильтрует список.
    Последние открытые файлы в действии
    image

  6. Быстрая генерация phpDoc комментария. Набираем /** нажимаем Enter и конструкция комментария завершится автоматически. Если в методе или функции определены параметры и указаны типы, то IDE учтет эту информацию при генерации. А если имеется ключевое слово return, то даже попробует угадать тип возвращаемого значения
    Быстрая генерация phpDoc комментария в действии
    image

  7. Генератор кода. Жмем в файле Alt+Insert. В появившемся popup окне IDE предлагает нам переопределить метод, реализовать метод, добавить конструктор, геттеры и сеттеры, а так же phpDoc коментарии
    Генератор кода в действии
    image

  8. Refactor This. Ctrl+Shift+Alt+T В открывшемся окне, нам предоставляется богатый выбор по рефакторингу кода. Перед применением изменений, можно выбрать предварительный просмотр, чтобы оценить какие файлы будут изменены
    Refactor This в действии
    image

  9. Postfix Completion. Удобный инструмент, который появился в 9 версии IDE. Позволяет быстро писать конструкции типа if, if not и т.д.
    Перед вставкой авто дополнения набираем точку и IDE откроет popup окно с выбором для завершения вставки.
    Postfix Completion в действии
    image

  10. Productivity Guide. Данный раздел покажет вашу статистику использования различных “Фич”.Все данные представлены в виде таблицы с колонками: Feature – название, Group – категория, Used – какое количество времени вы ей пользовались, Last used – когда последний раз использовали. Табличку со статистикой можно отсортировать по каждой колонке. Этот раздел так же примечателен описанием различных возможностей, в котором указаны горячие клавиши для вызова.
    Productivity Guide в действии
    image

Комментарии (52)


  1. Temirkhan
    21.07.2015 23:23

    Раз такое дело, может кто-то знает, как добавить выделенному тексту табуляцию?
    Не знаю, как вопрос правильно поисковику скормить, никак не найду — знаю только, что урезается табуляция при помощи shift+tab


    1. yTko
      21.07.2015 23:27
      +16

      просто tab?


      1. Temirkhan
        22.07.2015 21:04
        +1

        Крылов дал бы мне затрещину. Спасибо большое


    1. justabaka
      22.07.2015 08:28

      В PyCharm и куче других редакторов это обычно Tab.


    1. sectronix
      28.07.2015 18:57

      Так же можно сразу убрать у выделенного текста табуляцию: Shift + Tab.


  1. yTko
    21.07.2015 23:30
    +6

    ну а если по делу, то все это уже либо было, либо настолько старо (ну кроме постфикса, о котором, в общем-то, рассказывали в анонсе 9 версии), что хотелось бы узнать что-то новое и действительно полезное.

    habrahabr.ru/post/157409
    habrahabr.ru/post/212077
    habrahabr.ru/post/212153


  1. GHostly_FOX
    21.07.2015 23:48
    +4

    Так в 9-ке появился еще одна полезная фитча — редактируя имя тэга HTML в начале, автоматом он же редактируется и в конце…

    Например:

    <h3>текст</h3> Изменив <h3> на <h2> PhpStorm сам заменит </h3> на </h2>


    1. Set0r
      28.07.2015 16:21

      Иногда эта фича начинает вести себя непредсказуемым образом, если рефакторишь объёмный кусок html, во время удаления лишних тегов, в момент невалидной структуры, она может «втихоря» переименовать родительский div к примеру в a. Легко упустить это из виду и отправить на продакшен. В остальном штука очень удобная.


      1. WaveCut
        28.07.2015 16:43

        Да, это не очень удобно.

        Чтобы без проблем удалять обрамляющие тэги можно воспользоваться хоткеем C**+Shift+Del — он умеет вырезать врапперы, оставляя содержимое. В меню: Code -> Unwrap / Remove.

        Обратное действие: Code -> Surround with (C**+Alt+T)


  1. nitso
    22.07.2015 00:16

    Поиск в окне работает не только для дерева файлов, но и вообще в практически всех панелях. Classmap, VCS, Code Coverage и т.д.
    Отдельно хочется упомянуть поиск по действиям (ctrl + shift + a) — если забыл как сделать CamelCase для выделенного текста или любое другое действие.


  1. MTonly
    22.07.2015 00:28

    Возможно ли задать, переформатировать ли код при вставке из буфера обмена, индивидуально для каждого языка? Например, форматирование SCSS- или LESS-кода весьма полезно, а вот портить при вырезании/вставке аккуратно расставленные ранее выравнивающие пробелы (например, в списке объявлений переменных или при присваивании длинной строки с многострочной конкатенацией), например, в JS, превращая их в символ табуляции, нежелательно.


    1. darkgool
      22.07.2015 09:00

      Отключить автовыравнивание по вставке и форматировать выделенный текст по ctrl+alt+L


      1. MTonly
        22.07.2015 15:41

        Спасибо. Слишком хлопотно (сродни использованию впечатляющего сочетания клавиш Ctrl+Shift+Alt+V для вставки текста без изменений). Хотелось бы раздельного управления переформатированием при обычной (Ctrl+V) вставке кода на разных языках.


  1. Phizio
    22.07.2015 00:36

    всегда было интересно, как открыть окно выбора файла, чтобы путь к нему тут же подставился в позицию курсора. К примеру, когда пишешь атрибут src="… Автодополнение вещь хорошая, но если путь глубокий — то не так удобно. Хотелось бы узнать, есть ли такая возможность, именно во всплывающем окне с горячей клавишей вызова, а не в автодополнении. Ну и ещё о том, как настроить базовый путь при такой генерации, чтобы он от корневой папки сайта отсчитывался, а не от С:/ ;)


    1. darkgool
      22.07.2015 09:02
      +1

      Нужно docroot папку жмякнуть правой кнопкой и выбрать Mark directory as > Resource root


  1. vshemarov
    22.07.2015 00:37
    +1

    Дополнение к п.6: если в теле метода/функции над строкой, где происходит присвоение переменной, набрать /** и пробел, то получим комментарий phpDoc такого вида:

    /** @var  $variable */
    

    Удобно задавать тип переменной (особенно класс), когда IDE не может этого определить по выражению.


    1. SamDark
      22.07.2015 10:21

      Это не phpdoc, это vardoc.


  1. affka
    22.07.2015 06:00
    +10

    Выход из настроек IDE клавишей Esc
    Вы серьезно считаете это «фичей»? Мне кажется это уже стандарт, в том числе на вебсайтах.
    Я вам больше скажу — любое окно PhpStorm'a можно закрыть клавишей Esc.

    А вообще, как уже говорили, слабоват мануал. Надеюсь в следующей части будет рассказано действительно редкие и полезные фичи.

    Все hotkeys справедливы для Windows и думаю Linux версии
    Раз уж беретесь статью писать, то уже не поленитесь и найдите хоткеи для всех. Иначе какой смысл статьи?


    1. kovalevsky
      22.07.2015 10:59

      Ctrl+Q (Документация) по Esc не закрывается, а вот по Alt+F4 закрывается.


      1. JeStoneDev
        22.07.2015 11:47

        отключите Pinned Mode и будет закрываться по Esc


  1. Sayonji
    22.07.2015 06:02
    +1

    Когда начинал пользоваться сабжем, не сразу нашел очень полезное сочетание: Ctrl+F12 — аналог сублимовского Ctrl+R, т. е. поиск по определениям символов в текущем файле. Зачастую удобнее, чем Shift+Shift (поиск в проекте). И туда же подсказка: там нельзя, как в сублиме, пропускать буквы при поиске, но можно, если при пропусках ставить пробелы.
    (Я был бы благодарен, если бы какой-нибудь хороший человек сделал плагин, который при вводе букв в окошках Shift+Shift и Ctrl+F12 после каждой автоматом ставил пробел. Сам я не умею.)


  1. Quber
    22.07.2015 08:58

    Из удобных комбинаций могу отметить:

    1. Cntrl + N поиск по имени класса
    2. Cntrl + Shift + N поиск по имени файла

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


  1. JeStoneDev
    22.07.2015 10:09

    Статья очень походит на перевод вот этого видео www.youtube.com/watch?v=J9emzl_VmIs
    Если это так, то стоило бы указать ссылку на оригинал.


  1. alkresin
    22.07.2015 10:19
    +1

    Думаю времена, когда хотелось выделиться программированием в Notepad++, практически ушли.

    Думаю, большинство из тех, кто пользуется Notepad++ или другими текстовыми редакторами, делают это не для того, чтобы «выделиться», а потому что им это удобно.


  1. mihmig
    22.07.2015 10:30

    Скажите, а можно ли отлаживать консольные PHP-скрипты простым нажатием F5 (как это сделано в Komodo IDE) не переключаясь в браузер?


    1. DeadMoroz
      22.07.2015 11:56

      Отлаживать можно, но горячей клавиши по умолчанию для этого вроде бы нет.


    1. dvapelnik
      28.07.2015 15:37
      +1

      дебаг точно есть при запуске тестов в режиме дебага (Shift+F9) и при этом можно установить брейк-поинт и начинать дебажить там, где нужно

      Скрин


      1. WaveCut
        28.07.2015 16:50
        +1

        Я положил в ~/bin/phpx вот такое:

        XDEBUG_CONFIG=idekey=PHPSTORM /usr/bin/php $*

        Расширение настроено вот так

        xdebug.remote_autostart=off
        xdebug.remote_enable=On
        xdebug.remote_host="MY.IP.ADD.RESS"
        xdebug.remote_port=9000
        xdebug.remote_handler="dbgp"
        xdebug.remote_mode=req
        xdebug.idekey="PHPSTORM"
        


        image

        image


      1. nitso
        30.07.2015 18:41

        Проще всего дебажить консольные скрипты (на локальной машине с xdebug) можно так:

        • включаем пассивный debug-режим (Run — Start Listening For PHP Debug Connections или соответствующей кнопкой на панели)
        • Запускаем скрипт с аргументами: php -d xdebug.remote_enable=1 -d xdebug.remote_autostart=1 my_script.php

        xdebug.remote_enable=1 можно спокойно положить в php.ini, а remote_autostart я бы не советовал — пыха будет всегда ломиться в порт, даже когда не надо.

        Более «правильный» способ с указанием IDE Key приведен выше.

        А чтобы отлаживать по одной кнопке, достаточно создать debug-конфигурацию и запускать её, например, во встроенном терминале. Вообще без смены контекста будет.


        1. dvapelnik
          30.07.2015 21:55

          мое мнение, что гораздо удобнее запускать и дебажить консольные скрипты именно через конфигурационный профиль в IDE как я описывал выше


  1. Ashot
    22.07.2015 10:41

    Пункт 6 работает не только для php, но и js.


  1. annenkov
    22.07.2015 10:48
    +1

    Это все хоть и полезные, но довольно очевидные вещи, лучше бы собрать список менее очевидных полезных вещей, которые надо еще поискать, например
    1) Если выделить строку в окне редактора (можно кликом по левом полю) и нажать Ctrl+Alt+Shift+C или выбрать в контекстном меню Copy Reference — в буфер скопируется ссылка на текущую строку текущего файла типа Path/Class.php:123 — очень удобно для общения с другими разработчиками например, переход по этой ссылке осуществляется через Ctrl+Shift+N.
    2) Если подключен к проекту Git в контекстном меню при клике на левом поле окна редактора есть клевая вещь Annotate — можно смотреть кто и когда менял последний раз каждую строчку в файле.

    и т.д.


  1. Voenniy
    22.07.2015 11:00

    А как выделенный текст обрамить в кавычки, или обернуть скобками? Помню включал эту функцию, но сейчас что-то найти не могу.


    1. kovalevsky
      22.07.2015 11:04

      del.
      ошибся веткой


    1. JeStoneDev
      22.07.2015 11:20
      +3

      Ctrl+Alt+T / Cmd+Alt+T — для выделения скобками

      Settings/Smart Keys/Surround selection on typing quote or brace — для выделения кавычками (при нажатии на кавычку выделенный текст будет в них обернут)


      1. Voenniy
        22.07.2015 11:23

        Да, то что надо, спасибо!


      1. Assada
        22.07.2015 11:50

        О Боже. Я все это время страдал и унижался. Ленился погуглить. Спасибо большое!


  1. kovalevsky
    22.07.2015 11:04
    +1

    Из неописанного, чем пользуюсь:
    Ctrl+Shift+A — Поиск по действиям меню (из File, Edit, View и т.д.)
    Ctrl+Q — Открывает документацию по методу/функцией, на которой установлен курсор
    Ctrl+Alt+T — Surround With диалог и там же Live Templates


    1. WaveCut
      22.07.2015 12:56
      +1

      Ctrl+Click переходит к определению, иногда это не очень удобно, если в тайп-хинтах используются интерфейсы — вы пройдете в интерфейс. Чтобы увидеть его реализации — поставьте курсор на тип, нажмите Ctrl+Alt+B — если реализаций больше одной — вам покажет список, ну или сразу кинет к реализации.


  1. artspb
    22.07.2015 11:05

    Кстати, сегодня будет вебинар по новшествам 9-й версии.


  1. Stamm
    22.07.2015 14:48
    +1

    Есть ещё плагин «Key promoter». Смысл его в том, что если нажать мышкой какую-нибудь кнопку, у которой есть хоткей, то на время появится плашка с хоткеем

    Скриншот
    image


    1. TyVik
      30.07.2015 09:19

      И он-таки достанет и заставит повесить горячие клавиши на всё, чем хотя бы 3 раза воспользовался.


  1. booomerang
    22.07.2015 18:10

    Только про последние 2 узнал, всё остальное банальщина =).
    из фич пользуюсь также CTRL + w — быстро выделяем слово, строку или еще что.


  1. Holden
    23.07.2015 18:07

    Умеет ли phpStorm удалять лишние пробелы при сохранении? И автоматом заменять пробелы на табуляцию для отступов?
    Спасибо.


    1. JeStoneDev
      23.07.2015 19:30

      Пробелы на табуляцию — Edit/Convert Indent/To tabs
      По поводу лишних пробелов, не очень понятно, что вы имеете ввиду. PhpStorm поддерживает автоформатирование Code/Reformate Code, он в том числе приводит в порядок пробелы
      Чтобы настроить все это на сохранение, можно в Settings/Keymaps для Save All назначить комбинацию Ctrl+Alt+S, записать макрос Edit/Macros: Ctrl+A, Code/Reformate Code, Edit/Convert Indent/To tabs, Arrow Up, Arrow Down, Ctrl+Alt+S
      и назначить этот макрос в Settings/Keymaps на комбинацию Ctrl+S


      1. kovalevsky
        24.07.2015 09:23

        Это просто в Settings всё можно настроить, без макросов


  1. nobilix
    28.07.2015 10:32
    +1

    Советую посмотреть эту серию Laracasts
    laracasts.com/series/how-to-be-awesome-in-phpstorm
    тут очень наглядно и полезно все


  1. Munk
    28.07.2015 13:04

    Очень не хватало выделения столбцами после sublime (ctrl+shift+L).
    Оказывается в PhpStorm еще проще: alt + выделение мышой


    1. Munk
      28.07.2015 13:08

      Осталось найти аналогию саблаймовской alt+shift+w


      1. annenkov
        28.07.2015 13:23

        ctrl+alt+T?


    1. nitso
      30.07.2015 18:43

      Можно еще третьей кнопкой мыши (нажатым колесом) тащить курсор. Вообще, все это легко настраивается. А найти нужное действие (и подсмотреть клавиатурное сокращение) можно по ctrl+shift+a (вроде бы во всех стандартных раскладках).


  1. nitso
    30.07.2015 18:45

    Для тех, кто все время забывает сочетания клавиш, есть встроенная распечатывабельная подсказка: Help->Default Keymap Reference