Среды разработки

Работая в предыдущей команде (GCM), я писал на Java. Я пользовался Intellij IDEA (не люблю Eclipse) с плагинами для Protobuf и чего-то ещё. Всё было хорошо, и я был доволен.

В новой команде (Spanner/Test Infrastructure) я пишу на C++, Python, Go, Java — у нас тут несколько компонентов, написанных на разных языках и обильно склеенных Protobuf-ом. Я начал с Vim, мне не понравилось, попробовал нашу собственную IDE, тоже не особо. Потом подумал, что если мне нравилась Intellij, то может понравиться и CLion, среда разработки на C++ от тех же Jetbrains. Так оно и получилось, в общем. Конечно, с CLion у меня всё не идеально, и я продолжаю разбираться и подстраивать его под себя, но ничего удобнее мне пока не известно.

Как и Intellij, CLion имеет плагины для Python, Go и Protobuf. Однако у CLion нет плагина для Java, ровно как и у Intellij нет плагина для C/C++. Поэтому я, к большому своему сожалению, не могу вести всю свою разработку ни в одном из них. И я не могу понять, почему нельзя было сделать общую IDE платформу с плагинами под разные языки (чтобы некоторые плагины, например C++ и Java, были платными). Меня лично это бы очень устроило. Кажется, что сделать такую среду было бы вполне возможно, и она даже могла быть удобной и приятной в использовании (как умеют сделать в Intellij). Я не проверял, но есть подозрение, что Eclipse как раз таким комбайном и является, что, впрочем, не делает его более привлекательным для меня.

Когда Intellij IDEA не сохраняет файлы

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

Но когда именно файлы должны сохраняться? Помимо прочего, это происходит при переключении в другие окна, ведь, понятное дело, если я использую инструменты в терминале (тот же git), они должны мои изменения видеть. (Плагином для гита я не пользуюсь по разным причинам, в том числе потому что он для удобства скрытно делает некоторые прозрачные операции, которые изредко оказываются совсем не прозрачными).

Всё это прекрасно работает, когда я сижу за своим рабочим компьютером. Но иногда я работаю через VPN из дома, и у меня в браузере (да, прямо в Хроме) есть несколько вкладок: удалённый рабочий стол и несколько сессий SSH. В удалённом десктопе открыта Идея, в терминалах я запускаю тесты и git. И тут начинается: Идея-то не знает, что я в браузере на ноутбуке сейчас переключился в другую вкладку, поэтому мои изменения в коде не сохранены на диск. Я запускаю тесты и ломаю голову над тем, что в них происходит. Потом понимаю, что у меня ничего не сохранилось, иду в удалённый десктоп, нажимаю alt+tab, потом возвращаюсь в терминал, и там у меня всё работает как надо. Потом ещё несколько раздражающих переключений туда-обратно, и я снова забываю альт-табнуться из Идеи. Запускать терминал в удалённом десктопе мне не очень удобно.

В связи с этой же фишкой про сохранение Идею нельзя, в отличие от Эклипса, настроить на форматирование при сохранении. Можно сделать макрос, а я просто привык всё время нажимать хоткей для форматирования.

Сочетания клавиш

В Intellij IDEA есть замечательный шорткат Cmd+Shift+A (Ctrl+Shift+A), который позволяет выполнять команды с помощью клавиатуры, даже не зная сочетания для них. Команду нужно ввести в всплывающее окно, затем выбрать нужную. Выглядит это так:

Я считаю, что это очень крутая функциональность. Хотел написать, что каждая программа должна иметь такое сочетание, но понял, что нечто подобное уже предоставлено самой системой OS X. В меню Help (Справка) каждого приложения есть строка поиска по всем меню. Для этого поиска можно включить сочетание клавиш (по умолчанию Cmd+Shift+/). Также рекомендуется переключить язык интерфейса на английский, чтобы не вводить команды по-русски. Вот и всё, мышку можно выкинуть: