Atom. Еще один редактор для программистов
Долгое время для программирования в качестве основного редактора и среды разработки я использовал Vim, точнее, gVim. Не скажу, что мне в нем нравилось все, но по сравнению с другими перепробованными мной инструментами Vim, обвешенный плагинами, в работе очень удобен. Главный недостаток Vim — это его принципиальная однопоточность (кстати, исправления этого недостатка ждут от проекта NeoVim, участники которого занялись переписыванием исходного кода Vim). Из-за этого, если включить для языка Python анализ исходных кодов (в том числе установленные библиотеки), то при попытке написать, например, «wx.» плагин уходит в долгий анализ библиотеки wxPython, а пользователь вынужден ждать завершения этого процесса, который может занимать секунд 30. Это все из-за того, что Vim не может проанализировать исходники в фоновом режиме. Этого недостатка нет в Emacs, но я к нему так и не привык, а еще в Emacs мне не понравилось, как устанавливаются плагины, особенно когда столкнулся с проблемой несовместимостей разных версий.
Некоторое время назад я пробовал SublimeText, этот редактор мне показался интересным, но все-таки через две недели его использования я опять вернулся к Vim, даже не помню по какой причине. Правда, после этого в Vim я себе установил тему для раскраски исходников как в SublimeText, а теперь аналогичную тему поставил и для Atom.
И вот месяц назад я себе установил Atom. И знаете, он у меня стал использоваться на равных с Vim, т.е. для больших проектов я стал использовать Atom, а для исправления отдельных файлов — по-прежнему Vim.
В этом посте я расскажу про свой опыт использования редактора Atom и буду сравнивать его с Vim. Может быть правильнее надо было бы его сравнивать с SublimeText, на который он очень похож, и к которому он ближе по сути, но SublimeText я использовал слишком давно.
Начнем с того, что Atom — это текстовый редактор с открытым кодом, созданный компанией GitHub, и развиваемый, в том числе, сообществом open source. Atom — это редактор для программистов, поддерживающий множество языков программирования, включая C/C+, Python, Go, Haskell и, разумеется, JavaScript, который играет в этом редакторе ключевую роль из-за того, что плагины для Atom (плагины к Atom называются пакетами — Packages) пишутся именно на JavaScript (точнее, на JavaScript с использованием платформы Node.js).
Сам редактор сделан на движке Chromium, из-за чего редактор нельзя назвать легковесным и очень быстрым. Правда, особых тормозов при работе с ним я не замечал, хотя запускается он заметно медленнее Vim, но все-равно намного быстрее, чем, например, Eclipse. Размер дистрибутива под Ubuntu Linux составляет 68 МБ (сравнительно недавно вышел Atom 1.3.2, и именно про эту версию я буду говорить в этом посте).
Что делает программист, когда ему в руки попадает новый редактор? Правильно, лезет в настройки и пытается настроить редактор под свои вкусы (наиболее продвинутые программеры сразу начинают писать плагины, а совсем просветленные — делать свой форк).
Большое количество настроек — это хорошо, но обычно для программерского редактора хочется чего-то большего, а именно плагинов. Вот уж чего-чего, а на недостаток плагинов к Atom жаловаться не приходится. Всего за 2 года с момента появления редактора (первая версия вышла в феврале 2014 года) было вовлечено огромное количество людей, которые написали все эти пакеты. Atom весь состоит из пакетов, даже в только что установленном дистрибутиве их будет более 70. Это удобно не только тем, что «из коробки» вы получаете поддержку большого количества языков программирования и различных удобных примочек, но также тем, что неиспользуемые пакеты можно отключить, тем самым ускорив запуск редактора (про скорость мы поговорим чуть позже).
Для примера перечислю некоторые пакеты, которые входят в дистрибутив:
- Поддержка языков C, Clojure, Coffee-Script, C#, CSS, GFM (GitHub Flavored Markdown), Go, HTML, Java, JavaScript, JSON, Make, Objective-C, Perl, PHP, Python, Ruby (включая Ruby-on-Rails), ShellScript, SQL, XML.
- Автодополнение для языков HTML и CSS.
- Пакет для создания сниппетов (часто используемых шаблонов кода).
- Пакет для автосохранения.
- Пакет для установки закладок на определенные строки кода.
- Подсветка парных скобок.
- Поиск и замена тоже реализована в виде пакета.
- Нечеткий поиск файлов, когда вы помните, какие символы были в имени файла, но точного имени не помните.
- Пометки новых/удаленных/исправленных строк (для исходников, которые хранятся в git).
- и множество других.
Под поддержкой языков понимается не только раскраска синтаксиса, но еще и настройки отступов, переноса длинных строк, отображение «невидимых» символов вроде табуляции и все такое прочее. Все это можно настраивать отдельно для каждого языка.
Например, для Python, где важны отступы, я себе включил отображение табуляции:
Хотя перфекционистам внешний вид такого отображения может не понравиться:
Что меня особенно впечатлило в Atom, так это легкость установки пакетов. Достаточно в настройках зайти в раздел «+Install», а там есть поле для поиска пакетов по ключевым словам. Если будет найден нужный пакет, то для его установки достаточно нажать кнопку «Install», и как правило, это не требует перезапуска редактора.
А еще Atom ненавязчиво следит за выходом новых версий пакетов. Обновляются пакеты тоже нажатием одной кнопки.
Кроме графического интерфейса Atom устанавливает программу apm (Atom Package Manager), которая позволяет из командной строки устанавливать, обновлять, удалять пакеты, а также публиковать свои пакеты и еще много всего с этим связанное. Например, чтобы установить пакет, нужно всего лишь выполнить команду:
apm install имя_пакета
Хоть Atom — это редактор для программистов, но он не заставляет для своей настройки постоянно править текстовые файлы конфигов, как это делает Vim и Emacs, в основном все делается через GUI. В файлы настроек мне приходилось лезть в двух случаях — для установки горячих клавиш (надеюсь, что в будущих версиях и этого делать не придется) и для добавления сниппетов кода.
Для хранения настроек Atom использует форматы JSON и CSON (CoffeeScript-Object-Notation), формат, напоминающий JSON, но использующий отступы вместо фигурных скобок. Вот, например, как выглядит файл со сниппетами в этой нотации:
'.source.python': 'Coding': 'prefix': 'cod' 'body': '# -*- coding: UTF-8 -*-' 'Docstring': 'prefix': 'ds' 'body': '"""$1"""' 'is None': 'prefix': 'isn' 'body': 'is None'
Поскольку функциональность Atom наращивается пакетами, коих огромное количество, то бессмысленно в этом обзоре подробно говорить о том, что еще умеет Atom. Перечислю лишь некоторые возможности, которые я настроил себе (не важно, это базовые возможности или добавленные с помощью пакетов).
Миникарта — область справа, показывающая исходный текст в очень уменьшенном масштабе. Эту возможность я впервые увидел в SublimeText.
Возможность быстро переключаться между проектами. Atom может открывать любую папку как проект, но с помощью пакета «project-viewer» можно добавить панель со списком сохраненных проектов, чтобы не искать каждый раз нужную папку.
При этом для каждого проекта могут сохраняться открытые вкладки с файлами (почему-то эта полезная возможность по умолчанию отключена в настройках).
Автодополнение. Без этого уже не обойтись любому серьезному программерскому редактору. Автодополнение в Atom мне понравилось больше, чем то, чего мне удалось добиться в Vim.
Показ новых / удаленных / исправленных строк.
Такая возможность работает только с исходниками, находящимися в репозитории git, но может быть есть подобный пакет и для других систем контроля версий — я не искал.
Также есть несколько пакетов, которые интегрируют в редактор работу с git / svn / hg и т.д., хотя я предпочитаю работать с git в консоли, но для быстрого просмотра того, какие файлы изменились в процессе работы, себе я установил пакет git-status, который выводит сообщение одноименной команды в нижнюю панель редактора.
Для Python (и наверняка для других языков программирования) есть множество пакетов для статического анализа кода (включая проверку выполнения рекомендаций PEP8 и PEP257). Среди всех подобных пакетов я остановился на пакете для проверки кода с помощью pylama.
Проверка может осуществляться «на лету» во время ввода текста, в настройках можно отключать предупреждения о невыполнении рекомендаций, на которые вы намеренно забиваете.
Есть пакет symbols-tree-view для показа структуры исходников (списка классов и их методов) и быстрого перехода к нужному классу или методу.
Многие жалуются на скорость работы Atom, но то ли у меня проекты не настолько большие, то ли в новых версиях Atom стал заметно быстрее. Разработчики редактора явно заботятся о скорости. Редактор измеряет время, которое тратится на загрузку каждого пакета, и показывает эту информацию пользователю. Среди стандартных пакетов есть пакет «Timecop», который показывает, сколько времени тратится на загрузку каждого пакета:
Также для конкретного пакета можно посмотреть, сколько времени он загружается.
В итоге под себя на 80% я Atom настроил за один день, остальные 20% донастраивал по мере того, как появлялась надобность в какой-то возможности. Для сравнения, с emacs я игрался неделю, и за это время настроил только 20% того, чего хотелось бы видеть в редакторе.
Теперь поговорим о глюках. С первой проблемой я столкнулся на этапе установки. Хотя Atom поставляется в виде deb-пакета под Ubuntu, но этот пакет отказывался устанавливаться. Оказалось, что для успешной установки Atom, из системы нужно удалить пакет apmd. К счастью, это решение достаточно быстро нашлось в Гугле, поскольку проблема известная. И вроде бы этот пакет в системе не очень нужен — он не потянул за собой удаление каких-нибудь других пакетов. В принципе, apmd — это демон для управления питанием (APM расшифровывается как Advanced Power Management), но в современных компьютерах вместо него используется ACPI (Advanced Configuration and Power Interface). Так что ничего страшного от его удаления случиться не должно.
Atom странно себя ведет в случае, если открытый в нем файл был изменен другой программой. При этом Atom молча загружает себе уже измененный файл, но перед выходом из программы предлагает его сохранить, даже если файл больше не изменялся. Такое поведение наблюдал несколько раз, но на 100% оно не повторяется.
Если коротко подводить итоги по тем возможностям, что я использую, то Atom однозначно выигрывает у Vim по автодополнению, но для Atom я не нашел инструментов для рефакторинга кода на Python (для Vim есть плагин ropevim, который использует для рефакторинга библиотеку rope). Автоматическое выравнивание кода в Vim мне показалось более аккуратным, хотя для Atom есть пакеты для форматирования кода, чтобы он соответствовал рекомендациям PEP8.
Пока в Atom не очень удобно устанавливать горячие клавиши — приходится лезть в конфиг, но по сравнению с Vim это недостатком не является.
У Vim остается преимущество по богатым возможностям редактирования и выделения, особенно в Atom не хватает возможности задавать количество повторений для операций, например, удалить 10 строчек или перевести 5 символов из нижнего регистра в верхний и т.п. Не хватает возможностей инкремента следующего за курсором числа, то что в vim делается с помощью горячей клавиши Ctrl+A. Для Atom есть плагины vim-mode и ex-mode, но я не люблю один инструмент превращать в другой, хотя из любопытства эти плагины в будущем собираюсь попробовать.
В результате мне редактор Atom очень понравился, в последнее время я его начал использовать в качестве основного редактора для программирования, а vim продолжаю использовать, если нужно подправить отдельные файлы, не открывая весь проект.
Ссылка на домашнюю страницу Atom: https://atom.io
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Luke K.:
«особенно в Atom не хватает возможности задавать количество повторений для операций, например, удалить 10 строчек или перевести 5 символов из нижнего регистра в верхний и т.п. Не хватает возможностей инкремента следующего за курсором числа» — попробуйте Emmet, как плагин есть под все популярные IDE и редакторы, его возможности должны отчасти покрыть Ваши требования
27 января 2016, 2:35 ппJenyay:
Спасибо, посмотрю, что это такое.
27 января 2016, 2:48 ппGabrielleRamires:
А я не могу перейти ни на емакс, ни на саблайм, ни на атом.
Vim-like навигация насколько стала привычной, что без неё я чувствую себя как рыба на суше.
В виме мне нравится виртуальный режим редактирования (set virtualedit=all). Я к этому привык и мне не комфортно без него. В других редакторах я не смог это настроить.
Выделение текста только в виме хорошо реализовано. Например, можно выделить и перемещаться к началу или к концу выделения.
Но в принципе, все эти редакторы примерно равны по функциональности и расширяемости.
Спасибо за обзор.
4 февраля 2016, 6:40 ппTol:
Подскажи а как в Atom’е скрипты отлаживать
10 марта 2017, 8:52 дп