PhpStorm — повышаем производительность (клавиатурные сокращения). Часть 1

http://www.sitepoint.com/phpstorm-top-productivity-hacks-shortcuts/
  • Перевод
  • Tutorial
imagePhpStorm — повышаем производительность (плагины и темы оформления). Часть 2

У всех нас есть любимые IDE или редакторы в которых мы пишем код. Для меня это PhpStorm, и потребовалось некоторое время, чтобы освоить все клавиатурные сокращения и ускорить свой рабочий процесс. В этой статье я поделюсь с вами некоторыми сочетания клавиш и советами, которые возьмут на себя часть рутинной работы, если вы тоже делаете свою работу в этой IDE. Эта статья была частично вдохновлена этим Reddit тредом, и я буду упомянать и демонстрировать некоторые трюки найденные там.

Обратите внимание, что я разрабатываю на Linux в Vagrant, размещенном в Windows, я буду использовать клавишу CTRL вместо CMD. Если вы работаете в OS X, замените CTRL на CMD.

Клавиатурные сокращения и хаки


PhpStorm позволяет настроить себя практически до бесконечности — вы можете заточить этот инструмент под себя так, что постороннему может показаться, что это совсем другая IDE.

(осторожно, много gif изображений)

Давайте посмотрим, чем мы можем воспользоваться: (в скобках рядом с сокращениями указаны названия функций в keymap)

  • CTRL+ALT+L (Reformat Code), одна из моих самых используемых комбо, форматирует ваш код в соответствии с выбранными настройками оформления кода:
    image

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

    Если вы находитесь в Linux, комбинация CTRL+ALT+L уже может быть связана с «Блокировкой экрана», и вы должны будете отвязать его в системных настройках или изменить его в настройках PhpStorm.

  • Нажав CTRL+SHIFT+Backspace (Last Edition Location), или кнопками мыши «Вперед» и «Назад» (если они у вас есть), вы перейдете к предыдущему месту редактирования. Это очень полезно при работе с большими файлами:
    image

  • Удержание CTRL при наведении курсора на переменные или методы даст вам дополнительную информацию, а Ctrl+клик на переменной или методе, или нажатие CTRL+B (Declaration), когда курсор установлен на методе или на переменной приведет вас прямо туда, где он определен:
    image

  • CTRL+Пробел (Basic) вызовет всплывающее окно с подсказками, если вы случайно закрыли его или оно какой-то причине не открылось:
    image

  • Когда PhpStorm обнаруживает какие-либо проблемы, он подчеркнет проблемную область и вызывает всплывающую подсказку поверх него при наведении мыши или курсора клавиатуры в этой области. Нажав на неё или нажав Alt+Enter (Show Intention Actions) будет предложено решение. Это поведение можно изменить выключив отчеты об ошибках (я не рекомендую так делать):
    image

  • CTRL+N (Class), и CTRL+SHIFT+N (File) позволит вам мгновенно перемещаться в любую часть какого-либо класса или файла проекта:
    image

    поиск является нечетким, а также поддерживает номера строк — вы можете использовать сокращения :XX, где ХХ — номер строки:
    image

  • PhpStorm запоминает несколько последних значений буфера обмена — вы можете нажать CTRL+SHIFT+V (Paste from History), чтобы вызвать всплывающее окно, которое позволит вставить ранее использованное содержимое буфера обмена.

  • Если вы влюблены в способность Sublime производить поиск по командам самой IDE, то вы можете делать это и в PhpStorm — CTRL+SHIFT+A (Fine Action) вызовет всплывающее окно поиска команд. Забыли сокращение для переформотирования кода? Просто нажмите CTRL+SHIFT+A и наберите «Refor ..»:
    image

  • Можно сгенерировать HTML используя Emmet встроенный в PhpStorm. Просто введите div#myDiv>span.mySpanClass>ul>li*5 и нажмите TAB и получите:
    image

    Расширить эти возможности для любого языка можно добавив свои шаблоны в Settings -> Editor -> Live Templates. Подробное описани Emmet для CSS и HTML здесь.

  • Возможно несколько неинтуитивно, CTRL+W (Select Word at Caret) (который чаще всего используется для закрытия вкладки, так что вы можете переназначить его) будет выбирать блоки кода под курсором (слово, переменную, и т.д.). Повторение комбинации расширяет выбор, включая родительский узел, например:
    image

  • Контекстно-зависимое редактирование позволит вам редактировать фрагмент кода, написанный на другом языке в отдельном редакторе. Например, если у вас есть HTML фрагмент, содержащийся в PHP строке, нажмите Alt+Enter над этой строкой и выберите Edit HTML:
    image

  • Режим выбора колонки может быть вызван, удерживая среднюю кнопку мыши (колесико) и перетаскивая. Для меня это особенно полезно, когда нужно скопировать часть кода с глубоко отступом, но игнорируя ненужные пробелы:
    image

  • Нажатие Alt+Home (Jump to Navigation Bar) позволит использовать курсоры для перемещения по цепочке переходов в верхней части. ESC выводит из этого режима:
    image

  • Рефакторинг (переименование) переменные и применения изменений сразу во всех местах, которые используют — SHIFT+ALT+CTRL+T (Refactor This) вызов меню рефакторинга, как показано на на анимации ниже:
    image

  • CTRL+F12 (File Structure) вызовет всплывающее окно, которое позволит выбрать метод в текущем файле, к которому вы хотите перейти. Несмотря на то, что нет поле поиска, как только вы начнете печатать, выбор сузится до вариантов, которые вы ищите.
    image

  • Этот твит подсказывает нам, что теперь вы можете «искать везде», дважды нажав Shift. Это мощная смесь всех предыдущих поисковых сокращений, позволяющая найти все, что необходимо в любой части проекта или IDE — от IDE команд до классов и объявлений функций, а также многое другое.



Еще один пост о продуктивном использовании PhpStorm.
Метки:
Поделиться публикацией
Комментарии 57
  • +3
    Double shift до сих пор иногда глючит: то курсор не ставится в popup, то само окно пропадает, иногда начинает мерцать.
    Ubuntu 12.04/Oracle Java 1.7/PhpStorm 7.1

    P.S. А за Ctrl + Shift + A спасибо. Не знал.
    • +2
      Точнее постоянно)
    • +11
      Думаю стоит указать что данные сокращения действуют практически во всех IDE от JetBrains. RubyMine, PyCharm и тд.
      • 0
        «Несмотря на то, что нет поле поиска, если вы просто начать печатать можно сузить выбор до именно того, что вы ищете.»
        Мощный перевод…
        • 0
          Поспешишь — людей насмешишь (
        • +1
          Надо бы переводчикам как-то взаимодействовать с авторами дайджестов, чтобы переводить статьи до их попадания в дайджест и, соответственно, прочтения :)
          • 0
            Мне, кажется, что переводчик как и мы с вами прочли эту статью благодаря дайджесту )
            • 0
              Так точно. zein это к тому написал, я думаю. Что после каждого дайджеста появляется несколько переводов статей из него. Что собственно и натолкнуло меня на мысль сделать это.
          • +1
            Ждем вторую часть :)
            Кстати, есть ещё очень удобное ctrl+shift+alt+n — но у меня в Fedora не отрабатывает одновременно 4 нажатия на клавиатуре :(
            • 0
              Сегодня-завтра будет. Хотел все одной частью, но понял что не одолею.

              не отрабатывает одновременно 4 нажатия
              переназначьте сокращение.
            • +4
              Спасибо за статью!
              А никто случайно не в курсе — можно ли настроить такое поведение: выделяем слово, нажимаем кавычку и это слово становится заключенным в кавычки? Очень не хватает после Aptana такой фичи.
              • +1
                Можно реализовать с помощью LiveTemplate + Wrap with livetemplate + быструю клавишу на всё это.
                • +4
                  Settings > Editor > Smart Keys > Surround selection on typing quote or brace
                  или Default settings лучше
                  • 0
                    Во! Большое спасибо!
                • –2
                  Вы что в промте переводили?
                  «и я будет упомянуть и демонстрации некоторые трюки найденных там»
                  • 0
                    Жаль нету фичи как в SublimeText, когда можно кликнуть, зажав CTRL, в нескольких местах и отредактировать их одновременно. Или есть?
                    • 0
                      shift + F6 нет?
                      • 0
                        SHIFT + F6, как я понял, выделяет все похожие переменные, чтобы переименовать их разом. Т.е. это что-то типа автозамены. Это совсем не то, что нужно.

                        Вот например у меня есть пара картинок в HTML, у которых я хочу прописать одинаковый атрибут (допустим data-test):

                        [img src=«some-image.png»| class=«some-class»]
                        [img src=«some-other-image.png»| class=«some-class»]

                        видите где стоят пайпы (типа курсоры)? Вот как так сделать в PhpStorm?

                        Вот гифка как это выглядит в Sublime Text: hanselman.com/blog/content/binary/MultiEditForVS.gif
                  • 0
                    Товарищи, а никто случаем не знает, можно ли добавить исключения для встроенного инспектора?
                    У меня tpl'ки хорошо вписываются под Smarty, но местами конструкции для моего шаблонизатора пишутся по другому. Из-за этого встроенный инспектор буянит.
                    • 0
                      Попробуйте вот так:

                      image
                      • 0
                        По нажатию Alt+Enter открывается меню Intentions и там по идее можно для каждого случая сказать Suppress error message, если это то, что Вам нужно.
                        • 0
                          А в последних версиях (EAP) можно убирать ошибки для отдельных файлов, а не на глобальном уровне.
                      • 0
                        CTRL+N, и CTRL+SHIFT+N позволит вам мгновенно перемещаться в любую часть какого-либо класса или файла проекта:

                        Двоеточие переводит к номеру строки, а можно как-то перейти к методу? Как, например, в Sublime Text по class@method или Crtl+R.
                        • 0
                          ctrl+shift+alt+n
                          • 0
                            Немного не то, это по всему проекту, Ctrl+12 — то, что нужно.
                        • 0
                          MacOS X 10.9, phpStorm 7.1/7.1.2 EAP. Не работает во всей 7-ой серии, кажись, отключение SmartKeys. А конкретно если то пункт: SmartKeys -> HTML/XML -> Automatically insert closing tag… Замучало уже совсем.

                          <div></... и автозакрывашка..., как итог: <div></div>div>

                          Пофиксите, плз… и добавьте в EAP хотя бы.
                          • 0
                            Блин, торможу, почему-то показалось, что это разработчики скинули пост, сорри. :)
                          • 0
                            Ctrl+Shift+Alt+T прекрасная менюшка быстрого рефакторинга, выноса переменной, метода и прочее.
                            • 0
                              help -> default keymap…
                              • 0
                                Очень люблю ctrl + alt + shift + N — поиск по символу (имени функции, метода, константы и т.п.).
                                • 0
                                  Ну, дока большая, а статья в которой собраны изюминки — весьма может быть полезна, например раньше не знал про выьор блока методом многократного нажатия Select character at caret.
                                • 0
                                  Если вы работаете в OS X, замените CTRL на CMD.

                                  Это применимо только к «Mac OS X» раскладке. А вот «Mac OS X 10.5+» отличается чуть больше чем полностью.

                                  ps: Было бы неплохо написать названия комбинации в меню настроек, что бы люди могли настроить под себя.
                                  • 0
                                    Недавно начал использовать PHPStorm, очень нравится.
                                    До сих пор правда не могу понять, как в JS можно убедить PHPStorm, что вот эти объекты, пришедшие из AJAX запроса и распарсенные из JSON, действительно содержат все эти поля, не отключая проверку индивидуально для каждого поля?
                                    Может, я чего-то не знаю?
                                    • +1
                                      Я обращаюсь к обьектам как к массивам, и шторм не парится.
                                      • 0
                                        Интересный подход, не подумал об этом. Спасибо :)
                                        Хотя конечно синтаксис выходит чуток более громоздкий.
                                      • 0
                                        Работаю в IntelliJ и тоже мучаюсь, когда подчеркивает некоторые поля в объектах. Обычно такое происходит, когда ключ добавляется как строка, т.е. obj['invalidKey']='someValue';
                                        • +1
                                          Нагуглил ответ на свой вопрос, может кому-то пригодится :)

                                          Создаем отдельный Content Root (Project Properties — Directories — New content root), чтобы не засорять продакшн дерево проекта.
                                          В нем создаем .js файлы, в которых описываем структуру объектов. Например:

                                          App.Type1 = {
                                             field1: 1,
                                             field2: 1,
                                             field3: 1
                                          };
                                          


                                          Дальше, в объявлении функции у аргумента можно указать в комментарии соответствующее имя объекта с описанием структуры.
                                          Пример:

                                          var foo = function(/*App.Type1*/obj, /*App.Type1[]*/arr) {
                                          
                                          };
                                          


                                          В случае второго аргумента, PHPStorm будет считать, что arr — массив из объектов такой структуры.
                                          Указывать тип нужно только один раз, в том месте, где объект берется с точки зрения PHPStorm «из ниоткуда», например, при получении из AJAX. В дальнейшем PHPStorm сам отслеживает передачу и использование переменных.
                                        • +1
                                          Нажал в Ubuntu CTRL+ALT+L, меня разлогинило :(
                                          • 0
                                            Я на всякий случай выделил в статье:
                                            Если вы находитесь в Linux, комбинация CTRL+ALT+L уже может быть связана с «Блокировкой экрана», и вы должны будете отвязать его в системных настройках или изменить его в настройках PhpStorm.

                                            Для себя я это решил изменением шортката на CTRL+ALT+SHIFT+L.
                                          • 0
                                            А кто-нибудь знает как PHPStorm заставить интерпретировать JS внутри тегов <% Template JS code here %>?
                                            • 0
                                              есть возможность связать макросом CTRL+S и автоформатировать кода при каждом сохранении

                                              Можете разжевать? Имеется ввиду задать для автоформатирования шорткат CTRL+S (два действия на одну комбинацию) или что-то другое?
                                              • 0
                                                Я это понял как — записать макрос, назначить ему какое-нибудь сокращение (сделал Ctrl+Alt+Shift+Z), а в поле «Second stroke» указать Ctrl+S. Но я сейчас попробовал, почему-то не отрабатывает по Ctrl+S (по Ctrl+Alt+Shift+Z срабатывает).
                                              • +1
                                                Было бы здорово чтобы Вы написали как собственно называются функции, которые вызываются приведёнными сокращениями.
                                                Например у меня переназначено Ctrl+W на закрытие таба и я не знаю как теперь найти функцию выделения, о которой Вы писал.
                                                Ну, допустим я нашел способ — включить дефолтную схему и там сделать поиск по сокращению, но было бы удобней сразу видеть это в статье.
                                                • +1
                                                  Написать названия сокращений в keymap? Сейчас сделаю.
                                                  • 0
                                                    Да, именно
                                                    • +1
                                                      Готово. За поиск по сокращениям спасибо, не был в курсе. Если кто как и я не в курсе, то вот
                                                • –1
                                                  Полтора года назад был пост с интересными комбинациями. А в этот пост бы еще сочетания для OSX добавить.
                                                  • 0
                                                    Готов принять в ЛК список команд с комбинациями, так как у меня не OS X, какая там раскладка по умолчанию я не в курсе, как клавиши называются и обозначаются тоже :)
                                                    • 0
                                                      А в Help->Default Keymap Reference у вас нет Mac-комбинаций?
                                                    • +1
                                                      Alt + Enter, прям из души в душу, спасибо!
                                                      • 0
                                                        Ctrl-Alt-L + Ubuntu — делает не реформат кода, а lock screen в KDE + Gnome + Gnome Fallback

                                                        stackoverflow.com/questions/211043/disable-ctrl-alt-l-in-kde
                                                        • +1
                                                          Всего-то 1 раз это было упомянуто в статье и 1 раз в комментариях. ;)
                                                        • 0
                                                          Открыл для себя очень полезную фичу CTRL+ALT+L (Reformat Code) но варианты которые предлагает IDE не подходят, есть какая то возможность загрузить/использовать готовые стандарты кодирования?
                                                          • 0
                                                            Выбор из набора предопределенных, самых распространенных cs. Сохраняйте свою тему и правьте то, что не по нраву.
                                                            Скриншот
                                                          • 0
                                                            Народ, кто в курсе, в восьмой версии phpStorm пропало автодополнение имен переменных внутри строк. Это баг или где-то что-то включить нужно?!
                                                            • 0
                                                              За ссылку docs.emmet.io/cheat-sheet особая благодарность!

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