Настройка 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). Их основная цель — помощь в обнаружении и исправлении синтаксических и стилевых ошибок в коде, соблюдение правил кодирования и т. д.
Использование линтеров в разработке является хорошей практикой, способствующей повышению качества кода и приведению его к единому стандарту, что значительно повышает поддерживаемость.
Если у вас macOS или Linux, то пропускайте все, что написано далее, и сразу переходите к этой главе
Для использования линтера в SublimeText вам необходимо установить два плагина под названием SublimeLinter и SublimeLinter-contrib-checkstyle (SublimeLinter-checkstyle).
SublimeLinter — это универсальный инструмент (фреймворк), предоставляющий функционал статического анализа кода для работы линтеров с разными языками программирования.
В качестве линтера, проверяющим Java-код, мы будем использовать утилиту Checkstyle. Но т. к. напрямую работать с SublimeLinter она не умеет, необходим промежуточный плагин SublimeLinter-checkstyle, который соединит инструмент статического анализа Checkstyle с возможностями SublimeLinter.
Воспринимайте SublimeLinter-checkstyle, как переходник (адаптер) между SublimeLinter и Checkstyle. Утилита Checkstyle будет скачена SublimeLinter-checkstyle автоматически.
Так как линтеры проверяют код на соответствие стандартам оформления, то необходимо иметь список таких правил в XML-файле, которые нужно добавить в линтер. Он будет автоматически анализировать код в соответствии с ними, идентифицировать потенциальные проблемы и указывать на конкретные строки с ошибками.

9.1 Настройка линтера

9.1.1 Для Windows

1
Установите плагины SublimeLinter и SublimeLinter-checkstyle с помощью Package Control
2
Скачайте файл startjava_checks.xml, а затем разместите его, например, в корне своего проекта
3
Укажите SublimeLinter-checkstyle путь до данного файла
  • нажмите пункты меню Настройки → Просмотр плагинов... Откроется файловая система. Перейдите в ней на уровень выше, а затем зайдите в папку под названием Installed Packages (на крайний случай найдите ее через поиск)
  • в ней откройте архив SublimeLinter-contrib-checkstyle.sublime-package с помощью 7zip
  • в архиве откройте файл linter.py, нажав F3 . Тут важно не просто кликнуть на данный файл, а именно нажать F3, либо открыть контекстное меню и выбрать пункт Просмотр. В противном случае изменения могут не сохраниться в файле, а значит линтер будет работать не правильно
  • в открытом файле через поиск найдите слово (включая указанные знаки) 'config':
  • замените текст, указанный справа от данного слова, на путь до файла с правилами
У меня это выглядит так:
  • сохраните данный файл, а затем закройте
  • если вы все сделали правильно, то отобразится окно:
  • жмите ОК, а затем закройте архив
4
Перезапустите SublimeText

9.1.2 Для Linux/macOS

1
1. Скачайте последнюю версию линтера
2
Для Linux/macOS плагин линтера не позволяет использовать файл со своими правилами. Это значит, что вам необходимо использовать линтер в ручном режиме, запуская его через консоль, как показано тут.

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

1
Откройте в SublimeText любой файл с Java-кодом
2
Нажмите Ctrl + Shift + P и напишите в строке Sublime, а затем кликните по строке, выделенной на картинке. Откроется окно, где будут отображаться ошибки
3
Линтер мгновенно проверит ваш класс и отобразит в окне все ошибки
4
Для проверки следующего класса достаточно всего лишь открыть его. Ошибки всех открытых классов будут отображаться в одном окне — очень удобно
5
Каждая строка ошибки в окне — кликабельная. Кликните на любую ее строку и вас перекинет на соответствующую строку кода
6
Кроме того, слева от кода, где идет нумерация строк, будут отображаться оранжевые точки, наведя на который, вы также можете видеть текст ошибки
7
Если вы исправили ошибку, то линтер перестанет ее отображать только после сохранения файла

9.3 Если линтер не заработал

1
Если линтер не отображает ошибки в вашем коде, значит либо их нет, либо вы неверно выполнили настройки. Перепроверьте еще раз все пункты из раздела по настройке линтера
2
Линтер работает только, если программа компилируется без ошибок
3
Линтер работает только, если измененный файл сохранен
4
Неверно указан путь до XML-файла
5
Обратный слеш \, используемый в пути до XML-файла, должен быть экранирован, т. е. вместо \ должно быть \\
6
Изменения в файле linter.py не были сохранены. Откройте этот файл и убедитесь, что в нем указан путь до startjava_checks.xml
7
В некоторых случаях линтер может зависать. Необходимо принудительно запустить его проверку. Для этого нажмите Ctrl + Shift + P, затем в появившейся строке введите SublimeLinter: Open diagnostics panel. Затем снова нажмите Ctrl + Shift + P, но уже введите SublimeLinter: Lint This View
8
Для диагностики проблем в работе линтера вы также можете использовать консоль, выводящую отладочную информацию. Для ее запуска нажмите пункт меню Вид -> Показать/Скрыть консоль. При этом в файле с настройками линтера должен быть активирован отладочный режим
9
Если ни один из способов вам не помог, всегда можно запустить линтер вручную из консоли. Для этого необходимо:
  • открыть консоль в папке с проверяемым Java-файлом
  • указать полный путь до checkstyle; до файла с правилами проверки, а затем и имя проверяемого класса
Например:

> java -jar D:/utils/checkstyle-10.17.0-all.jar -c D:/utils/startjava_checks.xml ArraysTheme.java
Если в консоль вывелся текст с неправильной кодировкой, то введите chcp 65001, затем снова запустите линтер. В итоге у вас должен отобразиться отчет линтера в следующем виде:
Если текст сообщения об ошибке, который выдает линтер, вам не понятен, то погуглите название модуля, указанного в квадратных скобках. Поиск вас приведет на страницу с описанием ошибки и примерами

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.
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!