Настройка Sublime Text для Java (ч. 3)

Введение

В прошлой публикации мы установили JDK и выполнили необходимые настройки для компиляции и запуска наших будущих приложений. В этой статье подготовим к использованию еще одну программу, но уже для написания кода. Закрываем все онлайн-редакторы, и делаем шаг в сторону более серьезных инструментов.
Для написания кода на языке Java существует большое количество программ: от мощных и профессиональных таких как Intellij IDEA, Eclipse, NetBeans — их еще называют интегрированными средами разработки (Integrated development environment, IDE), до программ попроще — текстовых редакторов. Самые популярные среди них: Sublime Text, Gedit, Xcode и т. д.
Профессиональные программисты, как правило, используют IDE. Это многофункциональные программы, упрощающие и ускоряющие процесс разработки, а также позволяющие автоматически выполнять компиляцию исходного кода, находить ошибки, опечатки и многое другое.
Т. к. вы только начинаете изучать программирование, и ваши задачи небольшие по объему, то я рекомендую использовать Sublime Text. На первых порах его функционала хватит за глаза.
А начинать изучение Java с написания кода в мощной, профессиональной среде разработки было бы неверно:
1
Вы запутаетесь во всех кнопках, меню, панелях этих IDE
2
Они слишком умные и многие вещи делают за программиста, что-то подсказывают. Вам это не подходит, т. к. вначале нужно набить шишек, сталкиваясь с разнообразными проблемами. И, конечно же, необходимо научиться их самостоятельно решать
3
Используя IDE, вы быстро привыкните к ее подсказкам и станете зависимыми от них, а мышление при этом останется на прежнем уровне — эволюции не произойдет. Можно легко превратиться в обезьянку, которая тыкает кнопки, но при этом впадает в ступор, если что-то ломается или появляется ошибка
Позже мы обязательно перейдем на Intellij IDEA, но сейчас важно настроить ваше мышление на язык Java, а для этого хватит и Sublime Text.

1. Текстовый редактор Sublime Text

На сайте Sublime Text скачайте и установите последнюю версию программы.
Её установка проста и ничем не примечательна. Попробуйте справиться с ней самостоятельно.
Возможностей этого редактора из коробки, для наших нужд, более чем достаточно. Но всегда можно что-то улучшить, настроив его под себя. Этим мы и займемся.

2. Настройка

Функционал редактора можно расширять через плагины. Тут они называются пакетами. За работу с ними отвечает пакетный менеджер (package control). Его нужно установить: он позволяет искать, устанавливать и удалять пакеты.
Кликните пункты меню Tools → Install Package Control…
Спустя несколько секунд об успешной установке сообщит это окно:
С помощью package control установим необходимые пакеты. Для этого перейдем в меню Preferences → Package Control (или Ctrl + Shift + p). Отобразится выпадающий список с возможностями менеджера пакетов:
Кликаем мышкой по пункту Install Package. Начнется скачивание доступного списка пакетов, которое займет несколько секунд.
В итоге появится список с пакетами, которые можно установит:

3. Русификация

Начнем с пакета, который позволит русифицировать Sublime Text. Он называется LocalizedMenu.
После завершения установки в меню Preferences появится новый пункт Languages. Открываем его и выбираем Русский (ru).

4. Подключение терминала

Следующим установим пакет под названием Terminus (можно также выбрать Terminal). Он позволит запускать терминал прямо в редакторе, а не в виде отдельного окна. В нем мы будем компилировать и запускать программы, работать с Git и файловой системой.
Попробуйте установить его самостоятельно по аналогии с LocalizedMenu.

4.1 Настройка для Windows

Далее настроим Terminus на то, чтобы он запускал терминал в папке, содержащей открытый в редакторе файл. Это очень удобно — не нужно будет каждый раз писать в терминале команды, чтобы перейти в место хранения файлов, с которыми вы в данный момент работаете.
Кроме того, вы можете установить настройки, которые позволят открывать и закрывать с помощью клавиатуры боковую панель редактора со списком ваших файлов, а также закрывать панель с Terminus — я их активно использую.
Откроем конфиг с настройками через меню Настройки → Package Settings → Terminus → Key Bindings.
Откроется двухпанельное окно, в правую панель (очистите ее предварительно, если она что-то содержит) которого необходимо скопировать и поместить следующий код:
[
    { 
        "keys": ["ctrl+alt+t"], "command": "terminus_open", "args": {
            "panel_name": "Terminus",
            "cwd": "${file_path:${folder}}"
        }
    },
    {"keys": ["alt+1", "alt+1"], "command": "toggle_side_bar"},
    {"keys": ["alt+shift+c"], "command": "terminus_close_all"}
]
Для открытия и закрытия боковой панели необходимо дважды нажимать alt+1
Также настроим, чтобы запускался именно cmder (его мы установили в прошлой статье), а не терминал по умолчанию. Для этого опять идем в настройки Terminus, но уже запустим Settings. Снова откроется двухпанельное окно. Приведу полностью код, который у меня прописан в правой панели (очистите ее предварительно, если она что-то содержит):
{
    "theme": "rippedcasts",

    "default_config": {
        "windows": "Cmder",
    },

    "shell_configs": [
        {
            "name": "Cmder",
            "cmd": ["cmd.exe", "/k", "G:\\Tools\\cmder_mini\\vendor\\init.bat"],
            "env": {},
            "enable": true,
            "platforms": ["windows"],
        },
    ],
}
Скопируйте его и поместите к себе, заменив мой путь до файла init.bat (он лежит в папке с cmder по адресу cmder_mini\vendor\init.bat), на свой.
Если вместо init.bat в папке отображается просто init, то значит в вашей операционной системе не настроено отображение расширений файлов. Выполните соответствующие настройки.
Сохраните и закройте окно.
Проверьте терминал в действии, нажав Ctrl + Alt + t в Sublime Text. Если все сделано правильно, то он успешно запустится в виде отдельной панели внизу окна.

4.2 Настройка для macOS

Для масОS настройка плагина Terminus немного отличаются. Откройте конфиг с настройками: нажмите на кнопку Sublime Text в левом верхнем углу, в открывшемся меню выберите Preferences —> Package Settings —> Terminus —> Key Bindings.
Откроется двухпанельное окно, в правую панель которого необходимо скопировать и поместить следующий код:
[
   { 
       "keys": ["ctrl+shift+b"], "command": "toggle_terminus_panel", 
       "args": {
           "cwd": "${file_path:${folder}}"
       }
   }
]
Также настроим, чтобы запускался именно cmder, а не терминал по умолчанию. Для этого опять откройте настройки Terminus, выбрав Settings. Снова откроется двухпанельное окно. Далее вставьте в правое окно следующий код:
{
   "default_config": {
       "linux": null,
       "osx": null,
       "windows": "Command Prompt"
   },

   "shell_configs": [       
       {
           "name": "Cmder",
           "cmd": ["cmd.exe", "/k", "%CMDER_ROOT%\\vendor\\init.bat"],
           "env": {},
           "enable": false,
           "platforms": ["windows"]
       }       
   ],
}
Сохраните и закройте окно настроек.
Проверьте работу терминала, нажав control + shift + b в Sublime Text. Если все сделано правильно, то он успешно запустится в виде отдельной панели внизу окна.

5. Отображение кодировки файла

Полезной опцией является отображение кодировки любых файлов. Для этого зайдите в меню Настройки → Настройки и пропишите в правой панели (очистите ее предварительно, если она что-то содержит) "show_encoding": true.
{
	"show_encoding": true
}
После сохранения, кодировка должна появиться в правом нижнем углу окна в виде надписи UTF-8.

6. Настройка табуляции

В разных программах (на разных компьютерах) размер табуляции часто отличается: может быть — 2, 4 или 8 пробелов.
Если размер табуляции в Sublime Text равен четырем пробелам, то уже в браузере, например, на сайте github.com (его мы изучим в последующих статьях) он будет равен восьми пробелам. Такие отступы выглядят гигантскими. Программисту может быть непривычно и не комфортно читать код с 8 пробелами.
Чтобы вам было понятнее, напишите в Sublime Text код из первой статьи, и сохраните его к себе на диск под именем MyFirstApp.java (без расширения *.java подсветка кода не сработает), например, по следующему пути D:\Java\StartJava\MyFirstApp.java.
Tab равен 4 пробела
Этот же самый код на GitHub будет выглядеть немного иначе:
Tab равен уже 8 пробелов
Если вы внимательно посмотрите на код на картинке из редактора, то в нем можно увидеть точки и длинные тире. Одно тире — это символ одного таба; одна точка — символ одного пробела. Чтобы их отобразить, необходимо выполнить настройку.
Откройте файл настроек в меню Настройки → Настройки. В правое окно добавьте строку "draw_white_space": "all", как показано ниже:
{
        "show_encoding": true,
        "draw_white_space": "all"
}
Не забудьте сохранить изменения.
Большие отступы — это еще не все. Это полбеды. Есть проблема пострашнее, когда в коде смешивают пробелы и табуляцию.
Программист считает, что раз у него в программе размер таба равен 4 пробела (самый частый вариант), то нет никакой проблемы в том, чтобы иногда вместо таба ставить пробелы в одном и том же классе. Чтобы понять, к чему эта практика смешивания в итоге приведет, давайте посмотрим на следующий результат:
Код в Sublime Text
Код на GitHub
А казалось бы, ничто не предвещало беды! Форматирование кода на GitHub «поехало».
Теперь вернемся к нашим проблемным табам, которые портят форматирование. Отображать их следы мы научились, осталось привести форматирование к единому стилю — использовать всегда и везде только пробелы.
Проблема известная и решение для нее давно существует — это автоматическая конвертация табуляции в пробелы. Это когда вы нажимаете Tab, но вместо него появляются пробелы — очень удобно и безопасно. Этот способ гарантирует, что форматирование в разных программах и на разных компьютерах останется без изменений.
Выполним эти настройки.
Откройте меню Настройки → Настройки, поместив в него два параметра: "translate_tabs_to_spaces": true и "tab_size": 4.
{
        "show_encoding": true,
        "draw_white_space": "all",
        "translate_tabs_to_spaces": true,
        "tab_size": 4
}
"tab_size": 4 — задает размер отступа для табуляции в 4 пробела.
"translate_tabs_to_spaces": true — преобразует табуляцию в пробелы.
Не забудьте сохранить файл настроек.
У вас может возникнуть следующий вопрос:
Mr. X
Я сделал все необходимые настройки, сохранил файл, вернулся к своему классу, а там ничего не изменилось: смесь пробелов с табуляцией (точек с длинными тире) никуда не делась.
Max
Внесенные настройки не преобразуют уже введенные табы в пробелы. Для такого преобразования в уже созданных классах, нужно нажать в правом нижнем углу на текст с надписью Spaces: 4, и преобразовать отступы (табуляцию) в пробелы.
Проделайте эту конвертацию со всеми вашими классами (если они есть).
Больше никогда и ни каких настроек, связанных с форматированием, вам делать не нужно!
Теперь в ваших классах должны быть только пробелы (точки). Длинных тире быть не должно!
Обратите внимание на зеленые стрелки, которые указывают на вертикальные линии-разделители. Справа от такой линии всегда должно быть 4 пробела (4 точки).

7. Проверка правописания (обязательно настройте)

По умолчанию Sublime Text не проверяет правописание, но даже если его включить, оно будет работать только для англ. языка. Решить эту проблему можно, скачав дополнительные языковые пакеты Russian-English Bilingual.dic и Russian-English Bilingual.aff, а затем поместить их в специальную папку.
Перейдем в меню Настройки → Просмотр плагинов… Откроется папка Packages. Перекиньте файлы в папку User.
Теперь необходимо активировать саму проверку, добавив в наш файл с настройками "spell_check": true.
Для выбора словаря идем в меню Вид → Словарь → User → Russian-English Bilingual.
Проверка правописания заработает только после перезапуска Sublime Text.
При этом в настройках автоматически появится строка "dictionary": "Packages/Russian-English Bilingual.dic".
{
     "show_encoding": true,
     "draw_white_space": "all",
     "translate_tabs_to_spaces": true,
     "tab_size": 4,
     "spell_check": true,
     "dictionary": "Packages/User/Russian-English Bilingual.dic",
}

8. Создание сниппетов

Если вам рано или поздно надоест писать одни и те же строки кода, например, System.out.println(); или объявление метода main(), то можете использовать сниппеты. Это небольшие фрагменты текста (шаблоны), которые магическим образом превращаются в полноценный код, избавляя от рутинных действий.
Например, чтобы не писать System.out.println(""), мы можем создать сниппет, который по команде sout + Tab будет разворачиваться в System.out.println("").
Чтобы создать сниппет, откройте меню Инструменты → Разработчик → Новый сниппет…
Откроется файл с шаблоном. Замените текст Hello, ${1:this} is a ${2:snippet}, на System.out.println("");. Затем добавьте команду sout вместо hello в строке 6. При этом не забудьте раскомментировать эту строку. Сохраните файл, например, под именем sout.sublime-snippet.
Проверим, как работает наш сниппет, написав sout, а затем нажав Tab.
Попробуйте сами сделать сниппет для метода main (каждый сниппет должен храниться в отдельном файле).

9. Статический анализ кода

Вам много придется писать код, но еще больше вы будете разбираться в чужом коде. Другие программисты, если вы работаете в команде, разрабатываете Open Source проект или пока еще только учитесь, будут, в свою очередь, читать ваш код. В этом случае возникает острая потребность в том, чтобы код от проекта к проекту, от класса к классу, от разработчика к разработчику соответствовал единому стилю написания. Для такой унификации применяются специальные правила, которые вам необходимо будет запомнить и практиковать.
Таких правил очень много. Запомнить их все сразу, а тем более применить к коду, по началу, будет не так просто. Для облегчения этого процесса существуют специализированные инструменты, проверяющие код и сигнализирующие о всех несоответствиях установленным стандартам.
Одним из видов таких инструментов являются статические анализаторы, в частности — линтеры (Linters). Их основная цель — помощь в обнаружении и исправлении синтаксических и стилевых ошибок в коде, соблюдение правил кодирования и т. д.
Использование линтеров в разработке является хорошей практикой, способствующей повышению качества кода и приведению его к единому стандарту, что значительно повышает поддерживаемость.
Так как линтеры проверяют код на соответствие стандартам оформления, то необходимо иметь список таких правил в XML-файле, которые нужно указывать при запуске линтера. Он будет автоматически анализировать код в соответствии с ними, идентифицировать потенциальные проблемы и указывать на конкретные строки с ошибками.

9.1 Как использовать линтер

1
Откройте в SublimeText любой файл с Java-кодом
2
Скачайте файл с правилами startjava_checks.xml, а затем разместите его, например, в корне своего проекта
3
Скачайте последнюю версию jar-файла линтера, разместив архив, например, в папке utils
4
Откройте консоль в папке с Java-файлом, который требуется проверить
5
Укажите в консоли необходимые параметры и полный путь до:
  • jar-файла checkstyle
  • XML-файла с правилами проверки
  • а также имя проверяемого класса
Например:
> java -jar D:/utils/checkstyle-10.20.1-all.jar -c D:/utils/startjava_checks.xml ArraysTheme.java
Где:
  • -jar — параметр консольной команды java, запускающий программу из jar-архива
  • D:/utils/checkstyle-10.18.1-all.jar — полный путь до линтера (замените на свой путь)
  • -c — параметр (сокр. от configurationFile), указывающий на то, что после него идет файл с правилами форматирования
  • D:/utils/startjava_checks.xml — полный путь до файла с правилами (замените на свой путь)
  • ArraysTheme.java — проверяемый линтером файл
6
Если в консоль вывелся текст с неправильной кодировкой, то введите chcp 65001, затем снова запустите линтер
Указанный выше способ запуска линтера не очень удобен для частых проверок. Да и вывод на консоль получается очень многословным:
Для упрощения запуска и вывода замечаний линтера в более компактном виде, создадим алиас (псевдоним под названием check):
1
Откройте файл user_aliases.cmd, который находится в папке с cmder по адресу /cmder_mini/config/. Для его редактирования кликните по файлу ПКМ и выберите пункт меню Изменить
2
В конце данного файла поместите следующую команду, заменив в ней мои пути до файлов на свои. Затем не забудьте сохранить изменения и перезапустить консоль
check=java -jar D:/utils/checkstyle-10.20.1-all.jar -c D:/utils/startjava_checks.xml $1 | sed -E "s|.*:([0-9]+):([0-9]+):(.*)|\1:\2 \3|; s|.*:([0-9]+):(.*)|\1 \2|"
Используемая вами командная строка должна поддерживать команду sed. В противном случае ничего не получится.

Если отображается ошибка, что "sed" не является внутренней или внешней командой, исполняемой программой или пакетным файлом, то установите Git — должно заработать
3
Теперь для запуска линтера достаточно написать имя алиаса и проверяемый java-класс:
> check IfElseStatementTheme.java
Алиас не только упростил запуск линтера, но и сократил выводимую им информацию:
Если вы исправили ошибку, то линтер перестанет ее отображать только после сохранения файла и его повторного запуска
Если текст сообщения об ошибке, который выдает линтер, вам не понятен, то погуглите название модуля, указанного в квадратных скобках. Поиск вас приведет на страницу с описанием ошибки и примерами

10. Прочие настройки

  • "highlight_line": true — выделяет строку, на которой находится курсор
  • "indent_guide_options": ["draw_normal", "draw_active"] — отвечает за отображение отступа в виде вертикальной линии для блока, в котором находится курсор
  • "save_on_focus_lost": true — активирует автосохранение, которое срабатывает каждый раз при потере фокуса окна программы. Эта опция избавляет от ручного сохранения файлов
  • "use_tab_stops": true — с этой настройкой, при нажатии Backspace, будет удаляться по несколько подряд идущих пробелов, как будто это символ табуляции. Вами не придется жать много раз Backspace, чтобы удалить каждый пробел
  • "rulers": [110] — устанавливает вертикальную черту-ограничитель, показывающую границу, за которую не должна выходить строка с кодом (обычно не более 120 символов)
Файл со всеми настройками в итоге будет выглядеть так:
{
     "show_encoding": true,
     "draw_white_space": "all",
     "translate_tabs_to_spaces": true,
     "tab_size": 4,
     "spell_check": true,
     "dictionary": "Packages/User/Russian-English Bilingual.dic",
     "highlight_line": true,
     "indent_guide_options": ["draw_normal", "draw_active"],
     "save_on_focus_lost": true,
     "use_tab_stops": true,
     "rulers": [100],
}
Если вам нужно видеть одновременно несколько файлов в Sublime Text, то окно редактора можно разделить на отдельные страницы (столбцы). Для активации этой фичи зайдите в меню Вид → Разделение экрана.
И последнее, если вы не хотите, чтобы интерфейс программы отвлекал вас от кодинга, то в Sublime Text можно включить отвлеченный режим, который скрывает все лишние элементы интерфейса. Активировать его можно по нажатию Shift + F11.

Заключение

Из данной статьи вы узнали про настройку Sublime Text для комфортной разработки, которая значительно облегчит вам написание кода на Java.
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!