Sublime Text как Golang IDE
Данный гайд подходит для следующих версий:
Версия | Годно? |
---|---|
Sublime Text 2 | ✘ |
Sublime Text 3 | ✔ |
Для Sublime Text 4 смотрите статью рядом.
Внимание: я переехал на ST4, этот гайд обновляться больше не будет.
Необходимо установить менеджер пакетов с https://packagecontrol.io!
Соглашения гайда
Данные элементы являются “соглашением по-умолчанию”, если не обговорено иное:
- Все пакеты устанавливаются с помощью Package Control: жмем
CTRL+SHIFT+P
(CMD+SHIFT+P
на macOS), ищемPackage control: Install Package
(работает автокомплит), жмемEnter
. Спустя несколько секунд откроется меню со списком доступных для установки плагинов. Начните вводить название плагина из заголовка для сортировки списка. Установка осуществляется нажатием на Enter. - Практически у всех пакетов есть клавиатурные сокращения, если они не являются плагином к плагину. Для просмотра оных перейдите в
Preferences → Package Settings → ИМЯ ПЛАГИНА → Key Bindings
.
Перед всеми делами
Sublime Text подгружает переменные окружения через параметр –login
(или -l
) шелла. Поведение шеллов может отличаться из-за этой переменной, поэтому при необходимости сделайте:
- Симлинк
~/.zshrc
→~/.zprofile
для ZSH.
Конфигурация самого Sublime Text
Я предпочитаю следующую конфигурацию:
{
"always_prompt_for_file_reload": false,
"always_show_minimap_viewport": true,
"animation_enabled": false,
"auto_complete_commit_on_tab": true,
"auto_complete_cycle": true,
"auto_complete_with_fields": true,
"block_caret": false,
"bold_folder_labels": true,
"color_scheme": "Packages/One Half Color Schemes/OneHalfLight.tmTheme",
"draw_minimap_border": true,
"ensure_newline_at_eof_on_save": true,
"font_face": "Go Mono",
"font_options":
[
],
"font_size": 8,
"highlight_line": true,
"ignored_packages":
[
"Vintage"
],
"lsp_format_on_save": true,
"match_brackets_angle": true,
"shift_tab_unindent": true,
"show_encoding": true,
"theme": "Default.sublime-theme",
"trim_trailing_white_space_on_save": true,
"word_wrap": true
}
Замечания:
always_prompt_for_file_reload
должен быть вfalse
, чтобы тот же gofumports не заставлял перезагружать файлы, которые открыты в редакторе и были им исправлены.lsp_format_on_save
- единственный параметр LSP, который находится в главном конфиге.
Обязательное
LSP
Этот плагин реализует Language Server Protocol и позволяет использовать gopls, который уже давно и прочно поселился в VSCode и стал, практически, стандартным средством линтинга исходников на Go.
Для работы этого плагина необходим установленный gopls где-то в PATH. В противном случае можно будет дописать полный путь до него в конфигурации (см. ниже).
Конфигурация
Перейдите в Preferences → Package settings → LSP → Settings
и скопируйте туда следующее:
{
"show_diagnostics_count_in_view_status": true,
"show_diagnostics_in_view_status": true,
"show_code_actions_bulb": true,
"show_symbol_action_links": true,
"show_references_in_quick_panel": true,
"clients": {
"gopls": {
"command": ["/data/projects/go/bin/gopls"],
"settings": {
"gopls": {
"codelens": {
"gc_details": true
},
"gofumpt": true,
"usePlaceholders": true,
"completeUnimported": true
}
}
}
}
}
Замечания:
- В
command
впишите полный путь до бинарника gopls, если он не находится у вас в PATH. Иначе удалите этот элемент совсем. - В
settings
передается конфигурация для gopls. Структура полностью аналогична той, которую вы вводите в VSCode, а полный список возможных параметров можно посмотреть тут.
Конфигурация клавиатурных сокращений настраивается в Preferences → Package settings → LSP → Key Bindings
:
[
{"keys": ["ctrl+shift+f12"], "command": "lsp_symbol_implementation", "context": [{"key": "setting.lsp_active"}]},
{"keys": ["ctrl+alt+shift+f12"], "command": "lsp_symbol_type_definition", "context": [{"key": "setting.lsp_active"}]},
{"keys": ["f12"], "command": "lsp_symbol_definition", "context": [{"key": "setting.lsp_active"}]},
]
В этом примере используются следующие сокращения:
CTRL+SHIFT+F12
- перейти к имплементации (или показать список доступных имплементаций).CTRL+ALT+SHIFT+F12
- перейти к определению типа.F12
- перейти к определению символа (перезаписывает поведение Sublime Text на более контекстное).
Помощь по возможным сокращениям, как обычно, приведена в левой части окна.
SublimeLinter
Этот плагин на самом деле является неким “метаплагином”, ибо у него есть свои плагины, которые реализуют интерфейс общения с линтерами.
Установка линтеров
Нам необходимо установить два линтера:
- SublimeLinter-golangcilint - плагин, реализующий работу с golangci-lint.
- SublimeLinter-gofumports - плагин, реализующий работу с gofumports.
В настоящее время плагин для работы с golangci-lint ожидает мержа PR от меня для более удобной конфигурации, поэтому устанавливать рекомендую из моего форка: https://github.com/pztrn/SublimeLinter-golangcilint.
Плагин для работы с gofumports пока не добавлен в Package Control, поэтому его необходимо установить вручную из https://github.com/pztrn/SublimeLinter-gofumports. Также по-умолчанию линтеру передается флаг -w
, который в автоматическом режиме исправляет проблемы с импортом.
Оба плагина устанавливаются следующим образом:
- Архивируете корень репозитория в zip (можно даже скачать весь репозиторий в zip и не архивировать локально).
- Переименовываете файлик в ИМЯ_ЛИНТЕРА.sublime-package, например SublimeLinter-golangcilint.sublime-package.
- Копируете получившийся архив в директорию Installed Packages. Получить к ней доступ можно через Preferences → Browse packages…, перейдя на уровень выше.
Конфигурирование линтеров
Идем в Preferences → Package Settings → SublimeLinter → Settings
и вставляем:
{
"lint_mode": "load_save",
"linters": {
"golangcilint": {
"executable": "/data/projects/go/bin/golangci-lint",
"args": "--fast -c ${folder}/.golangci.yaml"
},
"gofumports": {
"executable": "/data/projects/go/bin/gofumports"
}
}
}
Замечания:
- В
linters
в обоих случаях нужно или удалитьexecutable
, если бинарники линтеров находятся в PATH, или же указать правильные пути. - У линтера
golangci-lint
в этом примере используется файл конфигурации из корня открытой директории. Почините путь при необходимости. - Текущее поведение - линтинг при открытии и сохранении. Изменить можно с помощью указания другого значения в поле
lint_mode
, справку по которому можно получить в левой части окна редактирования настроек.
Gomod
Это подсветка синтаксиса для файлов go.mod
и go.sum
.
Дополнительные полезности
Дополнительно можно поставить еще следующие плагины:
Плагин | Установка | Описание |
---|---|---|
Ansible | Package Control | Подсветка синтаксиса для Ansible. Внимание: выставлять файлам тип для подсветки, возможно, придется вручную! |
Bracket Highlighter | Package Control | Подсветка скобок текущего участка кода. |
Dockerfile Syntax Highlighting | Package Control | Подсветка синтаксиса для Dockerfile. |
GitGutter | Package Control | Крайне удобное дополнение, показывающее текущее состояние измененности кода в столбце с номерами строк. Также можно включить инлайн-отображение последнего человека, который изменил строку. |
MarkdownLivePreview | Package Control | Лайв превью (в отдельном окне) редактируемого Markdown файла. |
SideBar Enchancements | Package Control | Много годных дополнений для сайдбара - возможность нормально создавать, удалять, переименовывать, переимещать файлы и директории, открывать в браузерах и многое другое. |