Comments 124
Добавление к find usages. В Idea чаще использую [ctrl] + [alt] + f7. Тогда список использований появляется в виде контекстного меню. Когда я знаю, что использований немного, так быстрее ориентироваться.
Удобная функция Quick Lists (в настройках): создаёшь список, вешаешь его открытие на горячие клавиши, и готова оперативная менюшка.
Я такую делаю для относительно частых операций над репозиторием Git.
Все знают про переход к определению — Cmd + Click, но есть и возврат обратно (!) — Alt + Cmd + < — (стрелочка налево)
Ну кстати, это не только к переходу относится, работает и просто для перемещений где что правилось, в т.ч. между файлами. И не только обратно, но и вперед, соотв. ALT + CMD + →
Функция в принципе стандартная, просто сочетание хорошо спрятанное.
UFO landed and left these words here
ctrl+shift+backspace вернет вас к месту последнего редактирования кода, если вы куда-то заскролились для поиска значения константы, или просто посмотреть.
Кстати про константы. Если константу сопроводить комментарием, в подсказке будет виден и комментарий:


Но этот же комментарий будет выводиться для всех констант, если объявлять константы через запятую:
class A
{
  /** Привет хабр! */
  const 
    Hello = 'Hello Habr',
    World = 'Hello World',
    Smth  = 'Hello Something';
}
Сам пользуюсь штормом, правда уже который год жду поддержки Codeigniter
Для того чтоб была поддержка 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
 */

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

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

Ещё очень полезна функция «Surround with» (Ctrl + Alt + t) — функция, помещающая selection в тег, который можно выбрать из заранее заготовленных (с атрибутами, все дела) или свободный tag, тогда останется просто набрать имя тега и оно само вставится и в открывающий и в закрывающий.
Разворачивание вширь достигается двойным кликом по вкладке файла. Обратно — также.
Странно, что не написано про Code -> Find Symbol (у него правда зубодробительная горячая клавиша, что-то вроде Ctrl + Shift + Alt + N, которая легко переназначается, к примеру, на более вменяемую Alt + N). Это поиск любой функции/метода и констант, очень удобно, когда точно помнишь имя метода, а класс нет.
Спасибо, добавил в топик. В принципе зубодробительность можно запомнить если поставить в ряд остальных поисков с [Что-то там] + N
Люди не подскажите а есть ли возможность в phpstrorm'е, разворачивать проект с заранее подготовленной структурой(каталогов, файлов) такое как в sublime
UFO landed and left these words here
это немного не то. Папки с файлами нужно создавать самому.
UFO landed and left these words here
Мне кажется вы не понимаете о чем идет речь.
В sublime есть прекрасный плагин, при запуске которого вы выбираете какой проект создать (html5 boilerplate, Nodejs app и т.д) в PhpStorm тоже можно создать эти проекты автоматом, разница в том что в sublime вы можете сами создавать эту структуру проекта.
ЗЫ: Мы работаем с yii, наша структура каталогов отличается от стандартной, и их 2 вида. Хотелось бы при создании проекта создавать быстро ту или иную структуру.
То что он с предустановленными шаблонами умеет это понятно. А возможно создавать свои шаблоны? вот это я хотел узнать.
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.
PHPStorm (как и всё от Intellij) просто супер IDE!

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

Я для себя открыл и активно использую 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, приходится долго искать клавишами…
Для IDE есть замечательный плагин TabDir — показывает в табах разницу в путях к файлам. Удобно при наличии множества одноименных файлов
Пятая версия шторма и без плагина научилась показывать части путей к файлам, если их имена совпадают.
Допустим есть 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:

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

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

Названия диры достаточно чтобы понять какой именно файл редактируется, а чтобы держать «картину» открытого в голове периодически закрываю всё и открываю только нужное.
На вкус и цвет… я пробовал пользоваться этим плагином, когда нативного функционала не было. Но когда увидел у коллег этот функционал без плагина, тоже выключил его. Не исключаю тот факт, что мои личные неудобства связанны с фреймворком, который использую
Вот бы 5 версия еще бы включала эту опцию по умолчанию. Пока прочитал — не знал, что такое есть. Спасибо!
UFO landed and left these words here
Я когда-то делал презентацию со своими подобными находками для Idea и Eclipse (тут). Там первая половина посвящена хоткеям. Может, что-то будет полезно.
Cmd + / — комментировать/раскомментировать строку (выделенные строки)
Тоже с шифтом — комментировать/раскомментировать выделенный текст.
Извините, что ввел в заблуждение — у меня:
Ctrl + / – комментировать/раскомментировать строку (строки), comment with line comment.
Ctrl + Shift + / – комментировать/раскомментировать выделенный текст, comment with block comment.

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

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

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

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

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

/** @var $myvar ClassA */


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

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

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

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


было бы проще. Имхо, конечно же.
Спасибо! Пользуюсь штормом чуть больше месяца, но уже успел полюбить и перевести на него весь офис :)
Моя рекомендация тем, кто только перешел на PhpStorm — изучать Tip of the Day при старте программы, там много интересного. Также полезным оказался раздел конфигурации Keymap — я настроил несколько сочетаний для работы с Git. И для Magento есть замечательный плагин — Magicento.
Для IDE есть замечательный плагин TabDir — показывает в табах разницу в путях к файлам. Удобно при наличии множества одноименных файлов.
PhpStorm поверг меня в удивление, зависнув на i7\ssd минут на 5 при поиске в большом проекте. При этом отменить поиск невозможно, интерфейс подвешивается — создатели видимо не слышали про фоновые потоки. Вообще после Visual Studio любая IDE на джаве в Windows (не знаю, может на других ос получше) кажется ну очень тормозной.
Спасибо за подборку! Не заметил хоткея ⌘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.
Alt на маке есть и довольно часто употребляется в таком именовании. На маковских клавиатурах подписано альтернативное название для Option — «alt».
Я думаю, автор топика не хотел пугать пользователей других операционнызх систем такими значками, что мне кажется логичным :).
Таки вы очень удивитесь, ибо ALT есть. На US версии да, оно зовется option.



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

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

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

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

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

через alt+insert будут создаваться getters and setters в месте куда поставишь курсор

Уже год как пересел с ZDE 5.5, одну вещи никак не могу воспроизвести в phpstorm. Если нажать на номер строки, она подсвечивается, а справо под прокруткой показывались точки, при нажатии перематывается на эту строку. Очень удобно когда работаешь над 2-3 местами, чтобы визуально не искать…
Это были закладки. Чтобы их поставить в шторме, поставьте курсор на нужную строку и нажмите F11, либо меню Navigate→Bookmarks→Toggle Bookmark, слева от скрола на левой полосе будут появляться черные метки, щелкнув по-которым можно перейти на нужную закладку.
Only those users with full accounts are able to leave comments. Log in, please.