, последнее обновление:

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 Много годных дополнений для сайдбара - возможность нормально создавать, удалять, переименовывать, переимещать файлы и директории, открывать в браузерах и многое другое.