понедельник, 11 октября 2010 г.

Visual Studio 2010: Сниппеты, заглушки и горячие клавиши

Завершение разговора об эффективном написании кода в Visual Studio 2010.

Сниппеты

Сразу скажу, что сниппеты (snippets) были и раньше, кардинальных нововведений (помимо увеличения количества) не наблюдается. Тем не менее, вещь полезная (помним, что сейчас не рассматриваем дополнения от сторонних производителей). Сниппеты бывают обычными и окружающими.
Обычные сниппеты используются с помощью набора названия в коде (или выбора из списка) и нажатия кнопки Tab. Ниже показан сниппет для конструктора.


Сниппет для конструктора
После нажатия Tab получим публичный конструктор без параметров. Последнее, кстати, говорит о некоторой ограниченности сниппетов – в идеале, хотелось бы иметь возможность быстрого добавления параметров, которые соответствовали полям класса.
Есть также "окружающие" сниппеты для выделенного блока кода, которые можно вызвать по правой кнопке или комбинации Ctrl+K, Ctrl+S. Для конструкций вроде try-finally, которые часто вводятся уже после написания кода, очень удобно.

Сниппет "try"
Можно написать свои сниппеты или скачать опубликованные. Только при использовании таких сниппетов нужно помнить, что ошибка в них будет многократно дублироваться в исходном коде.
Еще хотелось бы предостеречь от постоянного использования сниппетов там, где ту же самую задачу можно решить другими способами. Сниппеты могут приводить к дублированию кода, которого можно избежать, используя код повторно, применяя наследование, делегаты или аспектно-ориентированное программирование. Естественно, вышеупомянутые способы тоже нужно применять с умом.

Генерация заглушек

Генерация заглушек (stubs) присутствовала и в Visual Studio 2008. Возможность полезная как при обычном написании кода, так и при разработке по методике Test-Driven Development (TDD). При использовании несуществующего метода можно сгенерировать его (с учетом параметров).

Генерация заглушки
В Visual Studio 2010 в этом механизме замечен ряд улучшений:
  • работает и со свойствами
  • сам сразу подчеркивает код и показывает smart tag
  • Ctrl+. удобнее чем Ctrl+K,Ctrl+M

Увеличение масштаба

По нажатию Ctrl+Wheel (или выбрав значение в левом нижнем углу) можно увеличить или уменьшить масштаб текста в редакторе кода. Вот один из плюсов того, что новая студия использует WPF. Полезно для презентаций, при написании кода требуется редко.
Увеличение масштаба в Visual Studio 2010

Блочное выделение и редактирование текста

Крайне редко требуется, однако когда действительно требуется – полезно знать. Все очень просто – нажимаем и удерживаем Alt, затем стрелками на клавиатуре или мышью выделяем блок. После этого набираемый текст появляется синхронно во всех строчках. Забавная фишка для рисования псевдографикой в комментариях. Из серьезного применения вижу только один вариант – одновременное редактирование нескольких полей класса, например, изменение области видимости:
Блочное выделение и редактирование текста
Из мелких доработок – в Visual Studio 2010  добавили возможность выделения блока нулевой ширины, так что добавить область видимости, когда она не задана, теперь немного быстрее.

Отсутствие границ для окон

Теперь окна в студии не ограниченны главным окном. Их можно разбросать по монитору (или мониторам) как угодно.
Отсутствие границ для окон
Думаю, для обладателей нескольких мониторов это будет очень удобно. Сам не пользуюсь, потому что у меня один, зато большой и широкоформатный.
За кадром остался, пожалуй, только слегка видоизмененный способ перетаскивания и закрепления окон, но этим обычно пользуюсь крайне редко (все настроено один раз и менять не имеет смысла). Поэтому и рассказывать не буду :)

Базовые горячие клавиши

Базовые горячие клавиши в Visual Studio наверняка известны большинству разработчиков. Поэтому последний раздел скорее для новичков или тех, кто давно не писал код в студии. Жирным выделю те, которые не слишком на виду, но, тем не менее, полезны.
Поиск и замена:
  • Ctrl+G – перейти на строку с введенным номером (появляется диалог для ввода номера строки)
  • Ctrl+F/Ctrl+H – поиск/замена (по умолчанию - в текущем документе), при этом F3 ищет дальше в том же документе и при закрытии диалога
  • Ctrl+Shift+F/Ctrl+Shift+H - поиск/замена в файлах (в отличие от предыдущего пункта, необязательно открывать все измененные файлы – не тормозит, когда нужно поменять что-то во многих местах)
  • Ctrl+F3/Ctrl+Shift+F3 – поиск выделенного фрагмента без открытия диалога (вниз/вверх)
  • Ctrl+I – инкрементный поиск, после нажатия Ctrl+I начинаете набирать текст, и курсор автоматически перескакивает на первое найденное сочетание букв. Удобно то, что можно набирать дальше, и поиск будет идти дальше (пока не нажат Esc и набранные символы содержатся в текущем документе).
  • Ctrl+-/Ctrl+Shift+- – перейти на предыдущую/следующую позицию курсора (можно, например, вернуться после перехода на определение метода, посмотреть вызывающий его код и вернуться обратно)
Быстрые переходы и выделение текста:
  • Ctrl+Left/Ctrl+Right – переход влево/вправо по “словам”
  • Home/End – переход в начало/конец строки (если используются отступы, то для перехода на “самое начало” строки потребуется нажать Home дважды)
  • Ctrl+Home/Ctrl+End – переход в начало/конец файла
  • Если во время всех предыдущих действий держать нажатым Shift, то можно быстро выделять нужный текст (чтобы скопировать/удалить слово и т.п.).
  • Ctrl+Tab – переключение между окнами в студии
  • Ctrl+Alt+Down – быстрый выбор между открытыми файлами (удобно когда их много), в ReSharper это сочетание назначено на другую команду, поэтому для аналогичных действий я пользуюсь его Ctrl+E
Буфер обмена:
  • Ctrl+Insert/Shift+Insert/Shift+Delete – копировать в буфер обмена/вставить из буфера/вырезать в буфер
  • Ctrl+C/Ctrl+V/Ctrl+X – более традиционные аналоги первого пункта
  • Ctrl+Shift+V – возможность вставки нескольких предыдущих скопированных значений (у меня ReSharper показывает окно с выбором, в чистой студии, по идее, заменяются значения при повторном нажатии)

Резюме

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

9 комментариев:

  1. Ещё ИМХО, очень полезное сочетание это Ctrl+, для вызова окна Navigate To. Уж больно долго искать нужные файлы в Solution Explorer в больших проектах.

    ОтветитьУдалить
  2. >Ещё ИМХО, очень полезное сочетание это Ctrl+

    Да, полезное - в предыдущей статье упомянул :)
    P.S. Аналог в ReSharper - Ctrl+Alt+Shift+N - немного длинно, но по смыслу грамотно (Ctrl+N - поиск типов, Ctrl+Shift+N - поиск файлов)

    ОтветитьУдалить
  3. Почему Вы написали этот топик относительно Студии 2010? Все эти фичи (кроме изменения масштаба) есть и в 2008 студии.

    ОтветитьУдалить
  4. >Почему Вы написали этот топик относительно Студии 2010? Все эти фичи (кроме изменения масштаба) есть и в 2008 студии.

    Получить ответ на этот вопрос можно самостоятельно, если прочитать не только заголовки :) А в предыдущем посте я и про Intellisense писал - им вообще издревле пользовались :)

    ОтветитьУдалить
  5. Ctrl+Left/Ctrl+Right – переход влево/вправо по “словам”

    чета не работают...

    ОтветитьУдалить
  6. > Ctrl+Left/Ctrl+Right – переход влево/вправо по “словам”
    > чета не работают...

    Не работают вообще, или не так как хотелось бы?
    Это вроде бы базовая функциональность большинства редакторов.

    ОтветитьУдалить
  7. >Не работают вообще, или не так как хотелось бы?
    да, не работают вообще
    нет никакой активности
    VS 2010 Version 10.0.30319.1 RTMRel

    возможно связано с билдом...

    ОтветитьУдалить
  8. Как продублировать выделенный блок(строку на которой курсор ) текста?
    например в notepad++ ctrl+D

    ОтветитьУдалить
  9. Никак, мне пришлось писать кривой макрос, который забивает буфер. Нативной реализации нет. Вообще по сравнению с Notepad++ Визуал студии еще расти и расти, именно как текстовому редактору.

    ОтветитьУдалить