Пользователь
0,1
рейтинг
5 ноября 2012 в 13:41

Разработка → Продуктивное использование PHPStorm

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

Не претендуя на библию или «настольную статью программиста» я хочу поделиться полезными находками в моей любимой IDE, не скатываясь в тупую копипасту мануалов и скучных списков хоткеев, только то, что я сам использую постоянно и над чем удивляются коллеги: «о! а так можно?»

Disclaimer

Если ни одна из фишек описанных в статье вам была не в новинку, потрудитесь добавить хотя бы одну свою, тогда мир станет лучше, деревья зеленее… ну вы поняли.

Я работаю на Mac, поэтому хот-кеи указываю в «своей» раскладке. Большинство из них будут работать простой заменой [CMD] на [CTRL] или [ALT], остальные, возможно, придется поискать на вкладке Keymap. Буду благодарен, если кто-то проверит и продублирует раскладку для WIN.

Автогенерация кода


Существует куча рутинных задач, которые иногда выполняются самим фреймворком, а иногда требуют тупой ручной работы. PHPStorm помогает упростить некоторые [CTRL]+N, например:

Создание геттеров и сеттеров (Getters & Setters)
По существующим переменным класса можно сгенерировать набор геттеров и\или сеттеров, причем в появляющемся окне можно выбрать для каких именно.

Создание PHPDoc
По сути действие аналогично тому, как если перед существующим методом начать писать /** и нажать Enter. Можно выбрать одну или несколько функций и на основании атрибутов и содержимого будет сформирован Doc Block.

Переназначение и реализация при наследовании (Override & Implementation)
При создании класса потомка или реализации абстрактных методов, чтобы не допустить ошибку, обычно приходится лезть в класс предок и запоминать или копипастить название и атрибуты метода. Или проверять для всех ли абстрактных методов есть реализация и вспоминать что же там требуется для ArrayAccess. Есть вариант получше:
[CMD] + I – Имплементация
[CMD] + O – Переназначение
После нажатия хоткея появляется окно где можно выбрать какие именно методы будем реализовывать. После выбора генерится соответствующий метод с соблюдением приватности и имена атрибутов, например так:
public function createTable($drop = false)
{
    return parent::createTable($drop);
}


Автоформатирование кода


Когда пишешь код сам, обычно форматирование получается само, но в ситуации, когда нужно поменять Code Style или пытаешься открыть чужой непривычно оформленный код, возникают проблемы. Можно смириться, а можно нажать [CMD] + [ALT] + L и IDE отформатирует код в соответствии с настройками (Preferences -> Project Settings -> Code Style -> PHP)

По-умолчанию, нажатие хоткея форматирует файл целиком. Если выбрать область, то форматируется только selection. Если выбрать в дереве папку или весь проект, можно сразу привести в порядок всё сразу.

Для каждого языка можно задать свой стиль оформления, причем для PHP также можно выбрать один из предзаданных стилей:
  • PEAR
  • Zend
  • Symfony
  • Drupal
  • PSR1\PSR2




Подсказки (Code Completition)


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

При нормальной архитектуре проекта IDE способна разобраться сама, но бывают ситуации когда она не справляется, например:
  • Функция может вернуть несколько типов
  • Объект является элементом массива
    $var = $arr[‘object’];
  • Класс 'B’ extends ‘A’. В классе 'A’ метод foo() возвращает $this, в классе 'B’ реализация метода отсутствует. Вызвав из объекта ‘B’ метод foo() IDE будет думать что возвращен был объект A.
  • При нативной шаблонизации средствами PHP. Где-то в дебрях системы в шаблон передается переменная $some, но внутри шаблона об этом неизвестно.


Варианты решения:



Для функций нужно писать PHPDoc с параметром @ return. Например:
/** @return SomeClass */
function a() {[…]}


Для переменных также можно указать комментарий:
/** @var $my_var SomeClass */

Тогда ниже для $my_var будет доступны подсказки

Для методов над классом можно указать PHPDoc
/** @method B foo() Описание метода */
class B extends A {[…]}


Если функция возвращает массив объектов
/** @return SomeObject[] */

Тогда, например, в foreach становятся доступны подсказки $value->… (по полям и методам класса SomeClass). Спасибо pro100tak

Задачи (tasks)


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

Избежать этого и внести порядок в работу можно с помощью Tasks. Суть в том, что у каждой задачи есть свой Change-лист, в котором указаны файлы с изменениями и переключаясь между задачами сразу видно, с какими файлами работали по этой задаче и что нужно не забыть.



Другой положительный момент, что IDE предупреждает, если вы в рамках одной задачи начинаете править файл, уже затронутый в другой.

Добавляет удобства, что при коммите в него автоматически попадают все файлы из текущего change-листа + в комментарий подставляется название задачи.

Хорошо если у вас уже есть багтрекер типа Jira или Redmine, если нет, на том же GitHub есть довольно простая система баг-трекинга, также поддерживаемая PHPStorm. Это позволяет подгрузить номер, название и описание уже существующей задачи по которой вы работаете прямо в IDE, хотя ничто не мешает не пользуясь трекером создавать произвольные change-листы.

FTP, деплой и автодеплой


Со многими проектами работа ведется по FTP или SFTP. PHPStorm имеет удобный функционал для работы с ними. Сохранив доступы к серверу и настроив mapping появляется возможность выгружать и загружать (upload & download) файлы на сервер нажатием одного хоткея. Чтобы работало — нужно не забыть тыкнуть «use this server as default»



Почему-то для Mac не заданы хоткеи по умолчанию для этих действий, но в Keymap можно их задать (спасибо Кэп). Я поставил следующие:
• Upload to Default Server: [CTRL] + U
• Download from Default Server: [CTRL] + D
(привел их для удобства поиска в Keymap + на мой взгляд легко запоминается)

Но об этом всём не стоило бы и писать, если бы не функция автодеплой. Поставив в настройках (Preferences -> Project Settings -> Deployment -> Options) пункт “Upload changed files automatically to default server” в любой режим кроме Never + галочку Upload external changes мы получаем автоматическую синхронизацию всех изменений.

Тут сказывается удобство того, что PHPStorm при нажатии [CMD] + S сохраняет сразу все файлы, т.к в результате процедура сохранения и аплоада совмещаются в одну.

Теперь можно не заботится всё ли загружено и ничего ли не забыто.

Консоль


Многие фреймворки используют консоль для быстрого выполнения частых действий. Для Symfony, Zend и других популярных фреймворков PHPStorm поддерживает подсказки и автодополнение консольных команд в Command Line Tools Console [CMD] + [SHIFT] + X

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

<?xml version="1.0" encoding="UTF-8"?>
<framework xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemas/frameworkDescriptionVersion1.1.2.xsd" name="My Tools" invoke="/full/path/to/console.php" alias="c" enabled="true" version="2">
    <command>
        <name>command-name</name>
        <help>Описание команды. Не забываем про обработку спецсимволов!</help>
        <params>class</params>
    </command>
    <command>
        <name>another:command</name>
        <help>Описание команды с необязательным параметром</help>
        <params>class[=null]</params>
    </command>
</framework>


Подробное описание как это делается вот тут: devnet.jetbrains.net/docs/DOC-1230

Разновидности поиска


[CMD] + N – Find by Class Name

Поиск по имени класса. Удобно в больших проектах, когда всё зарыто вглубь директорий или просто неизвестно где находится. Убойности добавляет «умный поиск», т.к. ищется как по части названия класса, так и по первым буквам, например SomeVeryLongClass будет найден по «SVLC». Учитывает регистр букв, будьте внимательны.



UPD: «Умный поиск» разработчики называют Camel's Hump. Кстати в настройках можно сделать чтобы выделение слов, а также перемещение осуществлялось не целиком (до пробела), а именно по по словам (до заглавной буквы). Спасибо, yujin1st

[CMD] + [SHIFT] + N – Find by File Name

Поиск по имени файла. Аналогично поиску по имени класса использует «умный поиск».

UPD: Для нахождения файла по вложенности можно использовать слеш: some/deep/dir/with/file.txt найдется по «s/d/d/w/f», спасибо develop7

[CMD] + [SHIFT] + [ALT] + N – Find Symbol

Поиск любой функции/метода и констант, очень удобно, когда точно помнишь имя метода, а класс нет. Спасибо conf

[ALT] + [F7] – Find Usages

В момент когда курсор находится на имени класса или метода нажатие хоткея позволяет найти все использования в проекте или определенной части (Scope).

Есть вариант [CTRL] + [ALT] + [F7] — тот же поиск по использованиям, но в виде контекстного меню. Спасибо iPavel

[CTRL] + [SHIFT] + F – Find in Path

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

Не стоило бы писать о “просто поиске”, если бы не возможность ограничить директорию в котором будут искаться нужные штуки, или настроить Scope. Scope позволяет гибко настроить и сохранить область поиска, для использования в дальнейшем. Можно выкинуть из поиска, например, файлы фреймворка или сторонние либы.



Убрать рамку с подписями вкладок


В нижнем левом углу есть кнопка, позволяющая убрать рамки для боковых и нижних вкладок. Сами вкладки можно открывать по сочетаниям [CMD] + 0-9, но некоторые вкладки не имеют цифры. В таком случае поможет быстрое двойное нажатие (даблклик) [CMD], которое на время удержания показывает рамку с кнопками, в которые можно тыкать мышой.



Productivity Guide



В меню Help->Productivity Guide есть возможность посмотреть небольшую статистику про себя, а также список фич со статистикой их использования. Спасибо nxn



Сравнение двух файлов



При выделении двух произвольных файлов в менеджере файлов появляется пункт «Compare Two Files», который показывает их в встроенном дифф-вьювере и позволяет переносить изменения из одного файла в другой. Спасибо pro100tak

Метки в проекте


С помощью [CTRL] + [SHIFT] + 0...9 можно оставлять метки. Вернуться на метку можно с помощью [CTRL] + 0...9. Работает в контексте всего проекта. Спасибо ualinker

Интересные хоткеи из комментариев



[CMD] + [ALT] + T (WIN: CTRL + ALT + T)
Окружение выделения предзаданными штуками, типа тегов или if-else, в зависимости от контекста. Спасибо happyproff

[CMD] + [F12] (WIN: CTRL + F12)
Структура текущего класса с поиском и опциональным отображением унаследованных членов
Аналог вкладки Structure, только во всплывающем окне. Спасибо happyproff

[ALT] + [Home] — быстрая навигация по пути к файлам. Спасибо develop7


[CMD] + [SHIFT] + A — поиск по командам IDE

Alt + ~ — менюшка с git коммандами. Спасибо denver

Ссылки


Презентация на аналогичную тему, спасибо Aivean

Про рефакторинг в PHP Storm, Спасибо fTR
Игорь @azverin
карма
30,0
рейтинг 0,1
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

  • +3
    Добавление к find usages. В Idea чаще использую [ctrl] + [alt] + f7. Тогда список использований появляется в виде контекстного меню. Когда я знаю, что использований немного, так быстрее ориентироваться.
    • 0
      Спасибо, добавил в топик.
  • +2
    Удобная функция Quick Lists (в настройках): создаёшь список, вешаешь его открытие на горячие клавиши, и готова оперативная менюшка.
    Я такую делаю для относительно частых операций над репозиторием Git.
  • +4
    Все знают про переход к определению — Cmd + Click, но есть и возврат обратно (!) — Alt + Cmd + < — (стрелочка налево)
    • +2
      Ну кстати, это не только к переходу относится, работает и просто для перемещений где что правилось, в т.ч. между файлами. И не только обратно, но и вперед, соотв. ALT + CMD + →
      Функция в принципе стандартная, просто сочетание хорошо спрятанное.
    • 0
      Cmd + Click, он же Ctrl + b.
      • 0
        [del]
    • 0
      Есть короче — CMD + [, CMD + ]
  • +3
    ctrl+shift+backspace вернет вас к месту последнего редактирования кода, если вы куда-то заскролились для поиска значения константы, или просто посмотреть.
    • +1
      Кстати про константы. Если константу сопроводить комментарием, в подсказке будет виден и комментарий:


      Но этот же комментарий будет выводиться для всех констант, если объявлять константы через запятую:
      class A
      {
        /** Привет хабр! */
        const 
          Hello = 'Hello Habr',
          World = 'Hello World',
          Smth  = 'Hello Something';
      }
      
    • +1
      не надо скроллить, скажите Ctrl-Shift-I
      • 0
        Ага или Ctrl+l — поиск вниз а Ctrl+Shift+l вверх.
      • 0
        или Ctrl + Q
  • 0
    Сам пользуюсь штормом, правда уже который год жду поддержки Codeigniter
    • +14
      У меня для вас плохие новости :)
    • 0
      Для того чтоб была поддержка CI нужно в CI_Controller вверху написать
      /**
       * @property CI_DB_active_record $db
       * @property CI_DB_forge $dbforge
       * @property CI_Benchmark $benchmark
       * @property CI_Calendar $calendar
       * @property CI_Cart $cart
       * @property CI_Config $config
       * @property CI_Controller $controller
       * @property CI_Email $email
       * @property CI_Encrypt $encrypt
       * @property CI_Exceptions $exceptions
       * @property CI_Form_validation $form_validation
       * @property CI_Ftp $ftp
       * @property CI_Hooks $hooks
       * @property CI_Image_lib $image_lib
       * @property CI_Input $input
       * @property CI_Lang $lang
       * @property CI_Loader $load
       * @property CI_Log $log
       * @property CI_Model $model
       * @property CI_Output $output
       * @property CI_Pagination $pagination
       * @property CI_Parser $parser
       * @property CI_Profiler $profiler
       * @property CI_Router $router
       * @property CI_Session $session
       * @property CI_Sha1 $sha1
       * @property CI_Table $table
       * @property CI_Trackback $trackback
       * @property CI_Typography $typography
       * @property CI_Unit_test $unit_test
       * @property CI_Upload $upload
       * @property CI_URI $uri
       * @property CI_User_agent $user_agent
       * @property CI_Xmlrpc $xmlrpc
       * @property CI_Xmlrpcs $xmlrpcs
       * @property CI_Zip $zip
       * @property CI_Javascript $javascript
       * @property CI_Jquery $jquery
       * @property CI_Utf8 $utf8
       * @property CI_Security $security
       */
      

      И в классе модели написать то что используется в моделях
      • 0
        Думаю, изначально имелось в виду, нативная поддержка, как сейчас IDE идет в сторону Yii и symfony.
  • +1
    Я яро использую «live templates», сделал кучу часто используемых шаблонов и кодирование сплошной zencoding. Экономия времени 2х.
  • +2
    Мгновенное разворачивание текущего файла с кодом на весь экран — Ctrl + Shift + F12. Оно же и возврат окон и панелей к изначальному состоянию. Особенно помогает при редактировании css, где свойства записаны в строки и явно не укладываются в 80 символов по ширине.

    Список членов текущего класса с поиском и опциональным отображением унаследованных членов — Ctrl + F12.

    Ещё очень полезна функция «Surround with» (Ctrl + Alt + t) — функция, помещающая selection в тег, который можно выбрать из заранее заготовленных (с атрибутами, все дела) или свободный tag, тогда останется просто набрать имя тега и оно само вставится и в открывающий и в закрывающий.
    • +1
      Разворачивание вширь достигается двойным кликом по вкладке файла. Обратно — также.
  • +4
    Для платформы IDEA есть замечательный плагин KeyPromoter, который позволяет осилить хоткеи.
    • +1
      azverin Добавьте это в пост! Надеюсь не забуду на работе открыть его.
    • 0
      Вот здесь лежит его более новая версия
  • +3
    Странно, что не написано про Code -> Find Symbol (у него правда зубодробительная горячая клавиша, что-то вроде Ctrl + Shift + Alt + N, которая легко переназначается, к примеру, на более вменяемую Alt + N). Это поиск любой функции/метода и констант, очень удобно, когда точно помнишь имя метода, а класс нет.
    • 0
      Спасибо, добавил в топик. В принципе зубодробительность можно запомнить если поставить в ряд остальных поисков с [Что-то там] + N
  • 0
    Люди не подскажите а есть ли возможность в phpstrorm'е, разворачивать проект с заранее подготовленной структурой(каталогов, файлов) такое как в sublime
    • 0
      При создании проекта укажите папку с файлами, проект будет создан из них.
      • 0
        Кстати, чисто штормовская фишка — в идее нужно создавать проект
      • 0
        это немного не то. Папки с файлами нужно создавать самому.
        • 0
          Ну можно тогда делать так :)
          `mkdir project-dir && cp -r project-structure/* project-dir/`
        • 0
          Ничего из ниоткуда не берётся.
          Либо шаблонный проект, либо пустой, либо из готовых файлов.
          • 0
            Мне кажется вы не понимаете о чем идет речь.
            В sublime есть прекрасный плагин, при запуске которого вы выбираете какой проект создать (html5 boilerplate, Nodejs app и т.д) в PhpStorm тоже можно создать эти проекты автоматом, разница в том что в sublime вы можете сами создавать эту структуру проекта.
            ЗЫ: Мы работаем с yii, наша структура каталогов отличается от стандартной, и их 2 вида. Хотелось бы при создании проекта создавать быстро ту или иную структуру.
    • 0
      www.jetbrains.com/phpstorm/webhelp/create-new-project.html

      Сам не использовал так, но с предустановленными шаблонами точно умеет.
      • 0
        То что он с предустановленными шаблонами умеет это понятно. А возможно создавать свои шаблоны? вот это я хотел узнать.
  • 0
    File templates — серьезно экономит время, которое бы вы транили на копипаст и правку.
    Вот пример из жизни:

    Базовый класс для всех моделей — SimpleModel. Все модели в системе от него наследуются. Так как основная модель данных — реляционная, то модели будут представлять из себя таблицы. В итоге делаем новый файловый шаблон, пишем туда:

    <?php
    #parse(«PHP File Header.php»)

    class ${NAME} extends SimpleModel
    {
    private \$table = '${TABLE}';
    }

    и сохранить этот шаблон как model

    В следующий раз, когда нам нужно будет создать новую модель, просто правой кнопкой в project view на папке с моделями, New->model, и нас будет приветствовать форма с полями для Name и Table. Это серьезно экономит время.

    Единственное, что напрягает — что нельзя сделать project-specific.
  • +1
    PHPStorm (как и всё от Intellij) просто супер IDE!

    Мои любимые еще:
    Alt + ~ — менюшка с git коммандами
    (Коммичу через Alt + ~ и Enter, а можно Alt + ~ и 5 — будет git annotate (вкл/выкл), и т.п)
    Ctrl + / — комментировать / раскомментировать (!) выделенные строчки (или текущую если нет выделения)
    (Ctrl + Shift + / — то же, но блочным комментом)
    Ctrl + Alt + V — экстракнуть выделенный блок кода в переменную (и заменить на использование здесь и всюду)
    • 0
      спасибо Вам большое

      azverin, добавьте пожалуйста в пост. Про Git вообще очень удобно.
  • +1
    Автодеплой при сохранении, мне кажется, стоит использовать только если разработка идет на удаленном сервере…

    Я для себя открыл и активно использую Atlassian connector for JetBrains (для JIRA + bitBucket).
    Отслеживаю разработку, версии, проблемы, баги. Зато плагин в PhpStorm автоматически ведет списки изменений, делает коммиты в репозитарий с нужными комментариями, и отслеживает затраченное время.

    Не увидел у автора описания Code Inspection (Code -> Inspect Code), не в окне редактора кода (и цветных полосок в полосе прокрутки), а в самостоятельном виде: автоматически запускается перед коммитом в репозитарий (ставиться галочка в окне), да и просто позволяет себя контролировать.

    Так же, к сожалению, нет описания Local History. Позволяет посмотреть все изменения файла с момента его появления в проекте, а также вернуться в определенный момент. Работает независимо от использования системы контроля версий.

    «Умный поиск» разработчики называют Camel's Hump. Кстати в настройках можно сделать чтобы выделение слов, а также перемещение осуществлялось не целиком (до пробела), а именно по по словам (до заглавной буквы)

    Интересно, кто как перемещается между файлами, при наличии многих одноименных (например проект на Yii, те же views)? Мышкой не удобно. Camel's Hump не спасает. Чтобы перейти в тот же /protected/views/mymodel/index.php, приходится долго искать клавишами…
    • 0
      Ctrl-Shift-N, p/v/m/i
      • 0
        сделали бы они такой же поиск для панели файлов
      • +1
        Для IDE есть замечательный плагин TabDir — показывает в табах разницу в путях к файлам. Удобно при наличии множества одноименных файлов
        • 0
          Пятая версия шторма и без плагина научилась показывать части путей к файлам, если их имена совпадают.
          • +1
            Допустим есть 4 файла admin.php в проекте на yii:
            — ...\protected\views\site\admin.php — одно представление одной модели
            — ...\protected\views\test\admin.php — другое представление другой модели
            — ...\protected\extensions\Bootstrap\gii\bootstrap\templates\default\admin.php — gii генератор от bootstrap
            — … \framework\gii\generators\crud\templates\default\admin.php — gii генератор в отдельной папке фреймворка вне проекта
            Вот так работает TabDir:

            А так стандартная возможность:

            Здесь в «стандартном» варианте вообще нельзя понять откуда какой файл
            • 0
              Мне обычно места во вкладках и так не хватает, убираю даже расширения файлов и крестик закрытия, не говоря уже про пиханину полного пути.

              Названия диры достаточно чтобы понять какой именно файл редактируется, а чтобы держать «картину» открытого в голове периодически закрываю всё и открываю только нужное.
            • +1
              На вкус и цвет… я пробовал пользоваться этим плагином, когда нативного функционала не было. Но когда увидел у коллег этот функционал без плагина, тоже выключил его. Не исключаю тот факт, что мои личные неудобства связанны с фреймворком, который использую
          • 0
            Вот бы 5 версия еще бы включала эту опцию по умолчанию. Пока прочитал — не знал, что такое есть. Спасибо!
  • +1
    Alt-Home
    Find Action по Ctrl-Alt-A
  • 0
    Refactor-Rename можно натравливать и на теги HTML, и на классы (S)CSS
  • 0
    remote проекты они сделали как в netbeans?
    • 0
      Смотря что вы под этим подразумеваете.
      Проект лежит удалённо, там и вертится, я выборочно загружаю папки, работаю с ними локально, по мере необходимости или автоматически отправляю их на сервер.

      Править файлы на сервере не могу. Только скачать, исправить и отправить.
      Это жутко неудобно, когда надо исправить настройки базы данных на сервере.
  • +1
    Я когда-то делал презентацию со своими подобными находками для Idea и Eclipse (тут). Там первая половина посвящена хоткеям. Может, что-то будет полезно.
  • 0
    Cmd + / — комментировать/раскомментировать строку (выделенные строки)
    • 0
      Тоже с шифтом — комментировать/раскомментировать выделенный текст.
      • 0
        у меня по хоткею cmd + shift + / запускается поиск по хэлпу
        • 0
          Извините, что ввел в заблуждение — у меня:
          Ctrl + / – комментировать/раскомментировать строку (строки), comment with line comment.
          Ctrl + Shift + / – комментировать/раскомментировать выделенный текст, comment with block comment.

          Правда уже не помню или это стандартные хоткеи или я сам настраивал.
          • 0
            Ага, через ctrl на маке работает )
          • 0
            этот хот-кей во многих IDE работает =)
  • +3
    Если метод/функция возвращает массив объектов:
    /**
    * @returns SomeObject[]
    */
    Тогда, например, в foreach становятся доступны подсказки $value->… (по полям и методам класса SomeClass)
    • 0
      Спасибо, добавил в статью.
  • 0
    Спасибо за статью. Вообще по данной замечательной IDE незаслуженно мало русскоязычной информации. Даже подумывал замутить проектик небольшой куда собирать всю инфу (например по настройкам). Сам когда переходил с NetBeans испытвал немало трудностей с отсутствием доступной информации.
  • +1
    Ещё:
    При выделении двух произвольных файлов в контекстном меню становится доступен пункт «Сравнить 2 файла», который показывает их в няшном встроенном дифф-вьювере и позволяет переносить изменения из одного файла в другой.
    • 0
      Можно выделять и сравнивать и два каталога, также можно выбрать один каталог и выбрать другой для сравнения в любом месте файловой системы, не только в проекте. Также из нижнего меню с ветками VCS можно сравнить любую ветку с текущим состоянием проекта.
  • 0
    А как же список всех комбинаций в самой IDE: Help -> Default Keymap Reference, пример того, что там выводиться можно посмотреть тут
  • +1
    Ребята использующие решарпер вам не простят то, что вы упустили из виду комбинацию `alt + enter`. В phpStorm она работает, кажется, немного по другому, но работает :)
    Стоит понажимать в разных местах (где идея подчеркивает что-либо или даже не подчеркивает) эту комбинацию и вы увидите чудо :)
  • 0
    Из того что еще не было указано
    • +1
      Для Win
      Alt+F1+1, сделать фокус на редактируемом файле в дереве каталогов — для больших проектов незаменимо
      Двух шаговые хоткеи, например по Ctrl+Shift+G+(A,R,C,P,B,H) я настроил все часто используемые операции гита
      Alt+up/down — перемещение по методам, Alt+left/rifht — перемещение по табам
      Plugin QuickJump для перехода на любой символ, после него мышка почти не нужна )
  • 0
    Ещё — можно удалить директорию из проекта (Шторм про неё забудет, но на диске файло физически останется).

    Полезно когда есть 5МБ файл с кодом, который, в общем-то и в индекс включать не надо.
    Реальный пример: vmware php sdk -> API.php При его индексировании Шторм адово тупит и из этого тупняка может и не выйти — приходится снимать процесс/задачу.
    • 0
      Да, в симфони например обычно кеш сразу надо исключать из индекса, ибо повторения дефинишинов классов будут.
      • 0
        повторения — фигня. а вот то, что они без phpdoc-комментов — это да, неприятно
        • 0
          Ну, гм, не знаю, у меня, насколько я помню, шторм только на повторения ругался. В любом случае, комменты фигачить в кеш было бы не хорошо, ибо apc их тоже будет кушать.
  • 0
    Очень полезная фича — можно оставлять метки с помощью Ctrl+Shift+0..9. Вернуться на метку можно с помощью Ctrl+0..9. Работает в контексте всего проекта.
    Почему-то никто никогда не упоминает про зависимые брейкпоинты, что при отладке сложных проектов является киллер-фичей. Т.е. один брейкпоинт срабатывает только тогда, когда сработал тот, от которого есть зависимость.
  • +3
    Несколько типов:
    /**
     * @return ClassA|ClassB
     */
    

    Возвращать тот же объект:
    /**
     * @return self
     */
    

    • 0
      self: у наследника все равно возвращает класс родителя (если описание было только в родителе)
      было бы отлично, если он поддтягивал бы класс объекта, у которого был вызван
      • 0
        static еще не поддерживается?
        • 0
          нет. по крайней мере у меня не работает (версия 5.0.4)
      • 0
        Да, тут ошибся, казалось, что работает. Стоит написать в их трекер.
    • 0
      Если делать возвращение нескольких типов, то автокомплит свалит всё в кашу, т.е. подсказки будут по обоим классам одновременно. Лучше чем ничего, конечно, но имхо не самый лучший вариант.

      • 0
        В таких случаях стоит возвращать интерфейс, который реализуют оба возвращаемых класса
      • 0
        А лучше не придумаешь. В большинстве случаев это вообще не очень хорошо, когда метод возвращает разные классы в разных ситуациях.
        • +1
          Ну здесь смысл такой, что может оказаться удобнее прописать класс для самой переменной там где уже известно с чем именно имеем дело.

          /** @var $myvar ClassA */
          


          Опять таки, в случае всяких хитрых фабрик или DI на момент написания контейнера может быть неизвестно с чем предстоит работать, хотя на мой взгляд это недочеты архитектуры, а не IDE.
          • 0
            Скорее всё же недостаток IDE, что она не позволяет задавать типы для вещей типа $array['key'] или function('key') — PHP язык динамический и для него подобные конструкции естественны в нормальной архитектуре.
            • 0
              Ну тут двояко, т.к. да, язык динамический и можно делать что угодно и как угодно.

              Но я лично стараюсь избегать таких конструкций, которые сами по себе содержат возможность ошибки или требуют лезть в документацию\код.

              Если для фабричного метода можно прописать сигнатуру и сам метод будет в автокомплите + по CTRL-клик мы попадаем туда, где этот метод задан. Не говоря уже о том, если используется Service Locator, то по списку подсказок для класса\объекта можно увидеть, что там вообще есть.

              Для какого-нибудь $app['connection'] есть куча возможностей для опечаток + чтобы «в чистом поле» узнать что там такое — хрен его знает как искать и куда лезть?
              • 0
                Вот и приходится для комфортной работы писать $app->getConnection(), а главное этот метод реализовывать, чтобы получить в IDE подсказки для свойств и методов объекта соединения. Был бы синтакисис phpdoc типа
                /** @hash 
                'connection'  IConnection
                'config' IConfig
                */
                $app = array(); 
                
                

                было бы проще. Имхо, конечно же.
  • +1
    Спасибо! Пользуюсь штормом чуть больше месяца, но уже успел полюбить и перевести на него весь офис :)
    Моя рекомендация тем, кто только перешел на PhpStorm — изучать Tip of the Day при старте программы, там много интересного. Также полезным оказался раздел конфигурации Keymap — я настроил несколько сочетаний для работы с Git. И для Magento есть замечательный плагин — Magicento.
  • +1
    Для IDE есть замечательный плагин TabDir — показывает в табах разницу в путях к файлам. Удобно при наличии множества одноименных файлов.
  • 0
    Добавил бы еще ссылку на Zen Coding
    Просто потрясающая вещь
    • 0
      Теперь вместо него Emmet. Жаль пока нет плагина для Шторма:(
  • –2
    PhpStorm поверг меня в удивление, зависнув на i7\ssd минут на 5 при поиске в большом проекте. При этом отменить поиск невозможно, интерфейс подвешивается — создатели видимо не слышали про фоновые потоки. Вообще после Visual Studio любая IDE на джаве в Windows (не знаю, может на других ос получше) кажется ну очень тормозной.
  • 0
    Спасибо за подборку! Не заметил хоткея ⌘P — список параметров функции/метода. Этот же список открывается при вводе открывающей скобки: some_function(

    Пусть меня заминусуют виндо/линуксоиды, но от профессионала, работающего на маке, странно видеть ПиСи-стайл в обозначениях клавиш. Название клавиши ⌥ произносится как «option», а в тексте обозначается именно ⌥. (Википедия: «alt» typically appears on the key, as well, for use as an Alt key with non-Mac software, such as Unix and Windows programs). Да и, в общем, если сравнить визуально написание [CMD] + [ALT] + L vs ⌘⌥L, разница очевидна. Не знал, что на маке есть Alt, тем более, кроме мака, у меня есть хакинтош, где дефолтный стандарт Alt = ⌘. Хорошо, что Jetbrains догадались в меню сделать все обозначения в стиле Mac.
    • 0
      Alt на маке есть и довольно часто употребляется в таком именовании. На маковских клавиатурах подписано альтернативное название для Option — «alt».
      Я думаю, автор топика не хотел пугать пользователей других операционнызх систем такими значками, что мне кажется логичным :).
      • 0
        Таки вы очень удивитесь, ибо ALT есть. На US версии да, оно зовется option.



        Хоткея вы не заметили, т.к. если свалить все хоткеи в кучу, то получится нечитабельная кака, а цель топика была именно в фишках IDE.

        UPD: Немного промахнулся, ответ для voidMan
        • +1
          Таки вы очень удивитесь, ибо ALT есть. На US версии да, оно зовется option.
          И всё же наоборот: надписи Alt на клавише Option может не быть. Вдогонку к объяснению с википедии, вот с сайта Apple:
          ⌥ (Option key) — «Alt» may also appear on this key.

          Хоткея вы не заметили, т.к. если свалить все хоткеи в кучу, то получится нечитабельная кака, а цель топика была именно в фишках IDE.
          Ну это я написал к разделу «Интересные хоткеи из комментариев», т.к. не раз видел, как для просмотра списка параметров люди обычно удаляют-вставляют скобку. :)
    • 0
      "[CMD] + [ALT] + L" — легче читается, чем шифрограмма "⌘⌥L".
      Шесть лет на маке, но до сих пор не могу быстро понимать эти закорючки в хотках.

      Да и дался вам этот опшин (макпонтостайл какой-то). Альт понятней.
  • 0
    Отличная подборка, спасибо за ваш труд.

    Ковыряние во всем многобразии возможностей IDE — занятие достаточно скучное, и у многих годами руки не доходят с этим разобраться. Хотя за эти годы можно было сэкономить месяцы рабочего времени. :)
  • +1
    Любителям копипаста подойдет Ctrl + Shift +V — улучшенный буфер обмена
  • 0
    Еще кое что, что мне кажется может быть очень полезным:
    Когда у Вас включен Debug во время breakpoint можно добавлять Watches clip2net.com/s/2tnG9 это я думаю знают все.
    Но можно еще выбрав переменную в Watches нажать edit в контекстном меню (или F2), выполнить необходимую команду, например какой-либо метод и сразу же увидеть результат clip2net.com/s/2tnI0
  • 0
    а не подскажет-ли кто-нибудь, как можно быстро переходить по отмеченным пунктам списка? Конкретно у меня проблема вот в чем:
    я хочу сделать pull. «VCS > Git > Pull...» открывает окошко, в котором по-дефолту отмечена (чекбокс) текущая ветка. Но! Веток у нас очень много, и эта текущая отмеченная ветка не показана в окошке, а где-то далеко, туда надо скролить. А я хочу pull из другой ветки (из мастера, например). Вот как бы мне быстро перейти к чекнутому пункту?
    • 0
      Пробовали набирать первые буквы названия? Такая функциональность есть в любом окне со списками.
      • 0
        про поиск знаю, только он и спасает. Но у нас реально много веток и хотелось бы попадать сразу на чекнутый пункт.
  • +1
    Стран что не упомянуто сочетание Ctrl+LMouseClick — переход к месту деклорации… (по крайней мере если работаю с js всегда срабатывает)
    Может быть это конечно тривиально и для большинства других IDE таких как RAD Studio (Delphi, C++ Builder) или VS, но для меня является приятной особенностью, которой часто пользуюсь… очень удобно смотреть допустим реализацию метода в библиотеке, чтоб понять, что да как он делает, а при работе с JS PHPStorm отправляет, при таком клике по стандартному методу к месту в скрипте стандарта где его описали:
    image
  • –2
    А почему на маке вы используете виндовый keymap?
    не хлоивара ради, а просто интересно.
    • 0
      А почему вы решили, что я использую виндовый кеймап?
      У меня стоит обычный маковый по-умолчанию + некоторые свои хоткеи.
      • 0
        а, понял, у вас не Mac Os X 10.5+ а просто mac os x?
        [CMD]+N смутило
        • 0
          а, понял, у вас не Mac Os X 10.5+ а просто mac os x?
          Вы о чем? И чем вас могло смутить сочетание CMD+N дo такой степени?
          • 0
            В phpstorm есть две раскладки для mac os x. Одна из них называется Mac Os X, а вторая Mac Os X 10.5+.
            Keymap Mac os x пересекается с системными комбинациями (уже если честно не помню какими) и больше похожа на раскладку для windows (CMD+N ~ CTRL+N). Поэтому ошибочно решил, что пользуются виндовой раскладкой.
            • 0
              Теперь понятно: вы писали о названиях keymap, а не версиях OS. Sorry, затупил.
            • 0
              Кстати именно из-за [CTRL] + Пробел в сторме пришлось менять системную комбинацию для Spotlight :)
              • 0
                угу, я заменил на CMD+.
  • 0
    А ещё можно выбирать в настройках стандарные схемы хоткеев других IDE или даже настроить на почти любое действие свой хоткей или даже несколько. В настройках искать в поиске Keymap.
  • 0
    В IDE если в классе определен магический метод __get, то Code Inspection не показывает ошибку «undefined field».
    Можно лишь поставить галочку, и тогда свойство будет подчеркнуто еле заметной серой линией.
    Можно ли как-нибудь повлиять на это? Например, чтобы показывалась ошибка если нет комментария phpDoc…
    • 0
      можно подкрутить цвет линии. а вообще IDE всё правильно делает. есть __get — значит узнать, какие «поля» оно вернуть может, а какие — нет, без выполнения кода нельзя.
      • 0
        Не спорю, что правильно. Просто даже с использованием __get и __set все поля описываются в phpDoc в том же Yii и если поля не описано, то логично считать это ошибкой
        • 0
          понятно. ну тогда вам одна дорога — report a feature request. Я эту фичу вижу как +1 галку в настройках проекта, хотя вам виднее.
  • +2
    Статейка на тему рефакторинга в PhpStorm: stfalcon.com/blog/post/phpstorm-refactoring
    • 0
      Спасибо, добавил в топик.
  • 0
    по поводу раздела «Убрать рамку с подписями вкладок»
    Ребята, у кого win7, посмотрите есть ли у вас баг с альт-табом в другие проги? У меня если я включаю сокращенные режим отображения и нажимаю альт-таб и попадаю например в оперу, то получаю preselected меню, как вроде я специально клацаю альт уже в другой проге, у кого есть такое — проплюсуйте на ютреке
    youtrack.jetbrains.com/issue/IDEA-87035
  • 0
    по поводу пункта «Создание геттеров и сеттеров (Getters & Setters)», в коментах в одном месте нашел сочетание alt+enter, но там не объяснено зачем оно. Если можно добавьте в этот пункт, если поставить курсор на поле класса и нажать alt+enter, то получим попап с возможностью добавить геттер, сеттер или что-то одно
  • 0
    Уже год как пересел с ZDE 5.5, одну вещи никак не могу воспроизвести в phpstorm. Если нажать на номер строки, она подсвечивается, а справо под прокруткой показывались точки, при нажатии перематывается на эту строку. Очень удобно когда работаешь над 2-3 местами, чтобы визуально не искать…
    • +3
      Это были закладки. Чтобы их поставить в шторме, поставьте курсор на нужную строку и нажмите F11, либо меню Navigate→Bookmarks→Toggle Bookmark, слева от скрола на левой полосе будут появляться черные метки, щелкнув по-которым можно перейти на нужную закладку.
  • 0
    ctrl + j Откроет листалку из доступных live templates для текущего языка.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.