Sublime Text 3 как Golang IDE · pztrn’s Wiki
, последнее обновление:
programming/golang software/sublimetext
Данный гайд подходит для следующих версий:
Версия | Годно? |
---|---|
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.
Я предпочитаю следующую конфигурацию:
{ "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 | Много годных дополнений для сайдбара — возможность нормально создавать, удалять, переименовывать, переимещать файлы и директории, открывать в браузерах и многое другое. |
Хотите обсудить эту статью? Пишите на почту!
PlainTasks — удобный ToDo для Sublime Text | by Valery Liubimov
Как часто работая над проектом вы ведете списки с текущими задачами? Почти наверняка — всегда. И это правильно! Держать в голове исправления, которые вам прислал клиент, или рыться в письмах в поиске задач, отнимает массу времени. Почти у каждого разработчика на столе лежит блокнотик для записей или файлик на рабочем столе для таких целей. Если вы когда-нибудь задумывались о том каким инструментом можно было бы заменить эту задачу, то эта статья для вас!
Большинство разработчиков, в особенности front-end, сегодня используют для своих проектов текстовый редактор Sublime Text. И такой выбор оправдан, гибкость и быстрота данного редактора дает большие преимущества, а количество написанных под него плагинов, способных сделать из вашего редактора среду разработки под любые нужды, делает его максимально универсальным. Об одном из таких плагинов сегодня и пойдет речь.
PlainTasks — удобный инструмент для ведения todo-листов вашего проекта. По факту все, что делает этот плагин, создает обычный текстовый файлик, который с помощью горячих клавиш можно удобно редактировать: помечать выполненные пункты, разделять задачи на группы, ставить сроки, помечать важность и т.д. Такой файл легко открыть в любом другом редакторе и прочитать.
Демонстрация внешнего вида файла создаваемого плагином- В Sublime Text нажать сочетание клавиш
Ctrl+Shift+P
если у вас Windows/Linux или⌘+Shift+P
если вы используете Mac; - Ввести
Package Control: Install Package
нажатьEnter
; - Найти плагин
PlainTasks
и установить его.
- Нажать сочетание клавиш
Ctrl+Shift+P
если у вас Windows/Linux или⌘+Shift+P
если вы используете Mac; - Найти и выбрать команду
Tasks: New document
.
ПРИМЕЧАНИЕ: при сохранении файла используйте расширение .todo
, .todolist
, .tasks
или .taskpaper
. Либо используйте имя файла TODO
без какого-либо расширения. Для получения более гибкой переносимости можно использовать todolist.txt
.
ПРИМЕЧАНИЕ: если вы используете Windows или Linux читайте далее символ ⌘
как Ctrl
. Если вы используете Mac, то вы невероятно богатый разработчик.
⌘ + enter
или ⌘ + i
: новый пункт
⌘ + d
: отметить пункт выполненным
ctrl + c
на Mac alt + c
на Windows/Linux: отметить пункт отмененным
ПРИМЕЧАНИЕ: функция по какой-то причине не срабатывает на русской раскладке.
Отмененный пунктЕсли написать обычную текстовую строку и поставить в конце нее двоеточие, создастся группированный список. Весь последующий контент будет объединен в группу.
С помощью сочетания клавиш ⌘ + r
можно быстро переключаться межу группами.
⌘ + shift + a
: добавляет все отмеченные пункты в архив вниз страницы
⌘ + shift + o
: архивирование в Org-Mode стиле, вся группа которая в данный момент находится под курсором уйдет в отдельный файл, например, если имя вашего файла list.TODO
то рядом создатся файл list_archive. TODO
в который и будут помещаться архивы с группами.
⌘ + shift + u
: в браузере будет открыта ссылка находящаяся под курсором. Ссылки не содержащие http(s) могут быть обернуты в <>
, например, <skype:valerylub>
.
Можно форматировать текст с помощью символов _
и *
как в Markdown. Например, *курсив*, _тоже курсив_, **жирный**, __и этот жирный__
В любом месте документа можно поставить разделитель, для этого нужно написать --
и нажать Tab
.
С помощью символа @
можно задавать произвольные теги
t + Tab
: тег «сегодня» @todayc + Tab
: тег «критическая важность» @criticalh + Tab
: тег «высокая важность» @highl + Tab
: тег «низкая важность» @lows + Tab + Tab
: тег «старта» @started(yy-mm-dd hh:mm) автоматически подставляет текущую датуtg + Tab + Tab
: тег «переключения» @started(yy-mm-dd hh:mm). Удобно использовать когда задача ставится на паузу.cr + Tab + Tab
: тег «создания задачи» @created(yy-mm-dd hh:mm)
d + Tab
: тег «крайнего срока» @due()
- @due(1) — первый день следующего месяца
- @due(5) — 5-ое число текущего месяца, либо следующего, если в текущем уже прошло
- @due(2–3) — 3-е февраля текущего/следующего года
- @due(31 23:) — 31-е число текущего/следующего в 23 часа
- @due(17.1.1 1:1) — 1 января 2017 года в 01:01
Относительные периоды времени тега @due():
- @due(+) — завтрашний день, аналогично @due(+1) и @due(+1d)
- @due(+w) — одна неделя от текущей даты, аналогично @due(+7)
- @due(+3w) — три недели от текущей даты
- @due(++) — один день относительно @created(), если он существует, иначе эквивалентно @due(+)
- @due(+2:) — два часа относительно текущего времени
- @due(+:555) — 555 минут относительно текущего времени
- @due(+2 12:) — 2 дня и 12 часов от текущей даты
Вы можете делать ссылки на определенные файлы вашего проекта . \filename.txt\
или ./another_filename.txt/
.
Так же можно ссылать на конкретную строку в файле ./filename.txt:11
и на колонку ./filename.txt:11:8
.
В SublimeText 3 вы можете сослаться на определенный символ используя конструкцию: ./filename.txt>symbol
.
В SublimeText 2 вы можете сослаться на текст используя конструкцию: ./filename.txt"any text"
.
Также в SublimeText 3 можно сослаться на директорию, которая откроется в левом сайдбаре ./dir/
.
По нажатию ctrl + o
на Mac или alt + o
на Windows/Linux будет открыта директория или файл.
Для того чтобы открыть список в HTML формате нужно вызвать командную строку саблайма ⌘ + shift + p
и найти команду Tasks: View as HTML
он откроется в браузере.
Команда Tasks: Save as HTML…
сохранит список в HTML формате без открытия в браузере.
Используйте ⌘ + control + up/down
на Mac и ctrl + shift + up/down
на Windows/Linux чтобы перемещать пункты меню.
PlainTasks — самодостаточный плагин, но имеет гибкие настройки, если вас чтото не устраивает вы всегда можете прописать в конфиг свои настройки.
Перейдите в Preferences → Package Settings → PlainTasks
и откройте Settings - User
, здесь можно переопределить все стандартные настройки, чтобы посмотреть полный список настроек можно открыть Settings - Default
.
Опция: open_tasks_bullet
По-умолчанию: ☐
Возможные варианты: — ❍ ❑ ■ □ ☐ ▪ ▫ — — ≡ → › [ ]
Опция: done_tasks_bullet
По-умолчанию: ✔
Возможные варианты: ✓ ☑ + [x]
Опция: cancelled_tasks_bullet
По-умолчанию: ✘
Возможные варианты: x [-]
Опция: date_format
По-умолчанию: (%y-%m-%d %H:%M)
Пример форматов дат
Опция: done_tag
По-умолчанию: true
Описание: Определяет ставить ли тег @done у завершенной задачи
Опция: before_tasks_bullet_margin
По-умолчанию: 1
Описание: Определяет отступ перед маркером в пробелах
Опция: project_tag
По-умолчанию: true
Опция: archive_name
По-умолчанию: Archive:
Описание: Заголовок архива. Убедитесь что он уникален
Опция: new_on_top
По-умолчанию: true
Описание: Как сортировать задачи в архиве (работает только при параметрах done_tag и date_format установленных по-умолчанию)
Опция: header_to_task
По-умолчанию: false
Описание: Если true, то заголовок списка может быть трансформировал в задачу по нажатию ⌘ + d
Опция: decimal_minutes
По-умолчанию: false
Описание: Если true, то разделителем для времени будет выступать .
вместо :
, например, 1.30
вместо 1:30
Опция: tasks_bullet_space
По-умолчанию: пробел
Описание: Любые символы идущие после маркера
Строка статистики находится внизу окна саблайма. В ней отображается статистическая информация о ваших задачах: сколько выполнено, когда выполнена последняя задача и т. д.
Строка статистикиЗа формат статистики отвечает параметр stats_format
в настрйоках плагина и по умолчанию имеет шаблон "$n/$a done ($percent%) $progress Last task @done $last"
– как вы можете видеть, это просто строка содержащая содержащая директивы и регулярные выражения (см. таблицу ниже).
$o
Количество отложенных задач$d
Количество выполненных задач$c
Количество отмененных задач$n
Количество выполненных и отмененных задач$a
Количество общего количества задач$percent
Соотношение$n
к$a
в %$progress
Графическое отображение шкалы прогрессбара (не отображается если <10%)$last
Дата последней завершенной задачи{{...}}
Возвращает в ожидании/завершенные/отмененные задачи подходящие под регулярное выражение, например,{{@tag}}
– вернет все задачи с тегом @tag
Свой формат вы можете прописать в настройках Settings - User
плагина PlainTasks:
{
“stats_format”: “$n из $a выполнено $progress ($percent%) последняя задача выполнена $last”, // если требуется не учитывать в статистике задачи в архиве// если требуется не учитывать в статистике задачи в архиве
“stats_ignore_archive”: true
}
{
“bar_full”: “■”, // символ заполнения
“bar_empty”: “☐”, // символ незполненного пространства// если вы хотите использовать Unicode когда копируете статистику — вы можете заменить символы
// например, чтобы конвертировать ■■■■■■☐☐☐☐ в [====== ]
“replace_stats_chars”: [[“ ■”, “ [=”], [“■”, “=”], [“☐ “, “ ] “], [“☐”, “ “]]
}
В командной строке Sublime Text найдите Tasks: Copy Statistics
после выполнения команды в буфере обмена будет храниться строка с вашей статистикой в установленном формате.
Превращение Sublime Text в облегченную Python IDE — Основы 2: Документация по Python 1.2
Хороший текстовый редактор — лучший друг разработчика. Вы используете его постоянно, и это становится как вторая пара рук. Клавиатурные команды, которые вы используете ежедневно настолько укоренятся в вашей мышечной памяти, что вы перестанете думать о них полностью.
С помощью Sublime Text можно превратить ваш текстовый редактор в функциональный эквивалент Python IDE. Самое приятное то, что вам не нужно устанавливать IDE сделать это.
Требования
Вот мои требования к «IDE»:
- Он должен обеспечивать отличную, настраиваемую раскраску синтаксиса.
- Должен обеспечивать надежное завершение табуляции.
- Должен предлагать возможность перехода к определению символов в других файлы.
- Он должен выполнять автоматический анализ кода, чтобы избежать глупых ошибок.
- Должна быть возможность взаимодействовать с интерпретатором Python таким образом, чтобы при отладки, редактор будет следовать вместе с отладчиком.
Какая версия?
Версия 2 подойдет, но я настоятельно рекомендую вам подумать об обновлении до версии 3. Некоторые из плагинов, которые я рекомендую, недоступны для версии 2.
Основные настройки
В Sublime Text существует несколько различных уровней конфигурации. Ты чаще всего будет работать с настройками на уровне пользователя.
Откройте «Настройки» -> «Настройки» — «По умолчанию», чтобы увидеть все настройки по умолчанию. и выберите, что переопределить.
Создайте свой собственный набор настроек, открыв «Настройки» -> «Настройки» — Пользователь. Это создаст пустой файл, затем вы сможете скопировать нужные настройки. чтобы изменить настройки по умолчанию на ваши личные настройки.
Вот разумный набор предварительных настроек (тема, цветовая схема и шрифт довольно личные, найдите те, которые вам подходят. ):
источник { "color_scheme": "Пакеты/Пользователь/Cobalt (SL).tmTheme", "theme": "Soda Light 3.sublime-theme", // Начертание шрифта, помогающее различать 0 (цифру) и 'O' (букву) // среди других проблемных символов. "font_face": "DroidSansMonoSlashed", // стареть. Интересно, увеличивается ли размер удобного шрифта линейно? // функция возраста? "размер_шрифта": 15, «игнорируемые_пакеты»: [ // Я не пользователь vi, поэтому мне это бесполезно. "Винтаж" ], "правители": [ // устанавливаем текстовые линейки, чтобы я мог судить о длине строки для pep8 72, // строки документации 79, // оптимальная длина строки кода 100 // максимально допустимая длина ], "word_wrap": false, // Я ненавижу автоперенос текста. "wrap_width": 79 // Используется другим плагином "размер_вкладки": 4, "translate_tabs_to_spaces": правда, "use_tab_stops": правда, }
Особенно важна настройка translate_tabs_to_spaces, обеспечивающая каждый раз, когда вы нажимаете клавишу табуляции, один символ \t заменяется четырьмя \s символов. В Python это жизненно важных !
Расширение возможностей редактора
Большинство требований выше выходят за рамки базовых функций редактора. Используйте плагины.
Sublime Text поставляется с отличной системой управления пакетами. Он обрабатывает установка и удаление плагинов и даже обновление установленных плагинов для ты. Вы также можете вручную установить плагины, которые не стали популярными. тем не менее, включая те, которые вы пишете сами. К счастью, система плагинов Питон!
Чтобы установить подключаемый модуль с помощью управления пакетами, откройте палитру команд с помощью shift-super-P (ctrl-shift-P в Windows/Linux). Супер ключ это команда или ⌘ в OS X. Когда палитра откроется, введите install, чтобы открыть Управление пакетами: команда «Установить пакет». Нажмите Enter, чтобы выбрать его.
После выбора команды Sublime Text получает обновленный список пакетов из сети. Появление списка может занять секунду или две. Когда это делает, начните вводить имя нужного пакета. Sublime Text фильтрует list и показывает вам то, что вы хотите видеть. Чтобы установить плагин, выберите его с помощью мышью или используйте клавиши со стрелками для навигации по списку и нажмите Enter, когда ваш плагин выделен.
Полезные плагины
Вот плагины, которые я установил для выполнения вышеуказанных требований.
Автодополнение
По умолчанию Sublime Text индексирует символы в открытых файлах и проектах, но не распространяется на установленные пакеты Python, которые могут быть частью нестандартного запустить среду.
Можно выбрать один из двух:
- SublimeCodeIntel предлагает мощную поддержку нескольких языков через это собственная система плагинов. Это немного тяжело и требует создания индекса.
- SublimeJedi поддерживает только Python, но работает быстрее и сохраняет индекс на своем собственный.
Я установил SublimeJedi и использовал следующие настройки для каждого проекта для убедитесь, что найден весь соответствующий код:
{ "папки": [ // . .. ], "настройки": { // ... "python_interpreter_path": "/Users/cewing/pythons/python-2.7/bin/python", "python_package_paths": [ "/path/to/project/buildout/parts/omelette" ] } }
python_interpreter_path позволяет указать, какой исполняемый файл Python должны быть изучены для определения символов.
Параметр python_package_paths позволяет указать дополнительные пути, будет выполняться поиск пакетов Python, содержащих символы.
После настройки вы сможете использовать клавиатуру ctrl-shift-G ярлык для перехода непосредственно к определению символа. Вы также можете использовать alt-shift-F, чтобы найти другие варианты использования того же символа в другом месте вашего кода.
Анализ кода
Анализ кода показывает вам ошибки, которые вы сделали в исходном коде до попытки для запуска кода. Это экономит время. Sublime Text имеет доступный плагин для кода линтеры под названием SublimeLinter.
В Python есть несколько отличных инструментов для анализа, pep8 и пакеты pyflakes. Pep8 проверяет нарушения стиля, слишком длинные строки, лишние пробелы и так далее. Pyflakes проверяет синтаксические нарушения, например использование символа, который не определен, или импорт символа, который вы не используете.
Еще один пакет linting Python, flake8 объединяет эти два и добавляет в mccabe, инструмент для проверки цикломатической сложности кода, который вы пишете. Этот может оказать большую помощь в обнаружении методов и функций, которые могут быть упрощенный и, таким образом, более понятный и более проверяемый.
Есть хороший плагин для SublimeLinter, использующий flake8. Для этого работы, плагин должен иметь исполняемый файл Python, содержащий Python необходимые инструменты.
Для этого используйте virtualenv. Сначала создайте виртуальную среду и активируйте это:
$ cd /Users/cewing/virtualenvs $ virtualenv sublenv Новый исполняемый файл python в sublenv/bin/python Установка setuptools, pip. .. готово. $ source sublenv/bin/активировать (субсрочный)$
Затем используйте инструменты упаковки Python для установки необходимых пакетов:
(sublenv)$ pip install flake8 Загрузка/распаковка flake8 [...] Загрузка/распаковка pyflakes>=0.7.3 (от flake8) [...] Загрузка/распаковка pep8>=1.4.6 (от flake8) [...] Загрузка/распаковка mccabe>=0.2.1 (от flake8) [...] Установка собранных пакетов: flake8, pyflakes, pep8, mccabe [...] Успешно установлен flake8 pyflakes pep8 mccabe Убираться... (субсрочный)$
Исполняемый файл Python для этой виртуальной среды теперь содержит необходимые пакеты установлен. Вы можете заглянуть в /path/to/sublenv/bin, чтобы увидеть исполняемый файл команд для каждого:
(субленв)$ ls субленв/бин активировать easy_install-2.7 pip2.7 activ.csh flake8 pyflakes activ.fish pep8 питон activ_this.py пип python2 easy_install pip2 python2.7
Теперь установите SublimeLinter, а затем SublimeLinter-flake8 с помощью управления пакетами.
Вот настройки, которые вы можете добавить в Preferences -> Package Settings -> SublimeLinter -> Настройки — Пользователь:
{ //... "линтеры": { "flake8": { "@отключить": ложь, "аргументы": [], "встроенные": "", "исключает": [], "игнорировать": "", «максимальная сложность»: 10, "максимальная длина строки": ноль, "выбирать": "" } }, //... "пути": { "линукс": [], "Окс": [ "/Users/cewing/virtualenvs/sublenv/bin" ], "окна": [] }, "python_paths": { "линукс": [], "Окс": [ "/Users/cewing/virtualenvs/sublenv/bin" ], "окна": [] }, //... }
Ключ paths указывает на путь, который содержит исполняемый файл flake8 команда.
Ключ python_paths указывает на расположение исполняемого файла python, который будет использовал.
Настройки внутри объекта flake8 контролируют производительность линтер Читайте больше о них, здесь.
Управление пробелами
Одной из проблем, отмеченных Flake8, являются конечные пробелы. Великолепный текст предоставляет настройку, позволяющую удалять их каждый раз при сохранении файла:
источник { "trim_trailing_whitespace_on_save": правда }
Не используйте этот параметр
Удаление конечных пробелов по умолчанию вызывает тонн шума при фиксации.
Держите фиксации для стилистической очистки отдельно от тех, которые делают важные изменения в коде.
В этом может помочь плагин TrailingSpaces SublimeText.
Вот настройки, которые вы можете использовать:
{ //... "trailing_spaces_modified_lines_only": правда, "trailing_spaces_trim_on_save": правда, // ... }
Это позволяет обрезать пробелы при сохранении, но только в строках, которые вы непосредственно модифицированный . Вы по-прежнему можете обрезать все пробелов вручную и сохранить наборы изменений. без шума.
Follow-Along
Последним требованием для разумного использования IDE является возможность следовать сеанс отладки в файле, где существует код.
Для SublimeText нет плагина, поддерживающего это. Но есть питон пакет, который вы можете установить в virtualenv для каждого из ваших проектов, который делает это.
Пакет называется PDBSublimeTextSupport и его просто установить с помощью pip:
(projectenv)$ pip install PDBSublimeTextSupport
С этим пакетом, установленным в Python, который используется для вашего проекта, любой Установленная вами точка останова автоматически появится на поверхности в SublimeText. И по мере выполнения кода вы увидите текущую строку в вашем Sublime Текстовый файл перемещается вместе с вами.
Основы разработки плагинов Sublime Text
Sublime Text — потрясающий редактор. Он сияет своей скоростью, поиском файлов и несколько курсоров. Если какого-то функционала не хватает, вы можете легко расширить его с помощью плагинов.
Я написал плагин TestRSpec для запуска Технические характеристики RSpec. Попробуйте и дайте мне отзыв через вопросы GitHub.
Зачем нужен собственный плагин?
Обычно есть две причины:
- плагин не делает то, что вы хотите
- существующий плагин содержит ошибки
Для rspec есть плагин RubyTest, он поддерживает множество инструментов тестирования — minitest, rspec, огурец. К сожалению, он не оптимизирован для rspec. Моя попытка внести свой вклад ни к чему не привела — код сложен для понимания и навигации. Уроки, извлеченные из дизайна плагина:
- ремонтопригодность — другие должны легко понять код и внести свой вклад
- низкая сложность — плагин делает одну вещь и делает это правильно
Прежде чем мы начнем — давайте посмотрим, какие есть проблемы.
Задачи
- Синтаксис и модули Python — обязательно ознакомьтесь с документацией по модулям, если вы пишете свой первый проект на Python
- sublime API плохо документирован — нужно учиться на исходниках и примерах, а также выяснить лучшие практики
- много условностей — более высокая кривая обучения
- трудно отлаживать
- нет автоматической перезагрузки исходников после распределения исходников по модулям
Звучит как вызов, но это очень весело.
Планируйте
Пришло время оставить свой след в экосистеме плагинов Sublime. Давайте удостоверимся, что вы правильно поняли:
- скажите себе, о чем этот плагин — помните, что он должен делать одну вещь и делать это правильно
- запишите минимальный набор функций, чтобы знать, когда придет время для первого выпуска
- попытаться улучшить существующий пакет перед добавлением другого
Выберите имя
Вы хотите, чтобы вас нашли в системе управления пакетами. Подумайте о ключевых словах, которые люди используют при поиске вашего плагина. Следуйте инструкциям по именованию, чтобы не переименовывать его позже.
Решите, какую версию Sublime Text поддерживать
Sublime Text 2 работает под управлением Python 2.7 и имеет немного другой API.
Sublime Text 3 работает на Python 3 и имеет более строгий (а также более предсказуемый) API.
Начните с поддержки только Sublime Text 3, так как его использует большинство людей.
Прочитать документацию
Плагины Sublime основаны на соглашениях — от способа вызова команд до способа указания конфигурация пользователя, а также привязки клавиш. Хорошие источники:
- Создание плагинов Sublime Text 3 — Часть 1
- Sublime Text 3 Документация
- Неофициальная документация Sublime Text
- Справочник API
К сожалению, нет исчерпывающего источника документации, который бы охватывал основные потребности. Не беспокойтесь — есть много хорошо написанных плагинов, а также активное сообщество на форумах, которые вам помогут.
- ТестРСпец
- AdvancedNewFile
- Эммет
- Контроль пакетов
- Форум разработчиков плагинов
Копаться в источнике пакета Sublime Default
Default
В пакете Sublime есть много хороших примеров, таких как асинхронная обработка с выходным потоком.
Это используется командой exec
, которая запускает консольную команду и передает вывод на панель.
Для пакета нет репозитория GitHub, но есть способ извлечь код:
- Установить PackageResourceViewer
- Извлечь пакет (следуйте инструкциям readme)
- Откройте папку пакетов — «Настройки -> Обзор пакетов» и найдите источник
Или просто откройте эту суть.
Перезагрузка кода плагина
Код плагина перезагружается в настройках и сохраняются основные исходные файлы Python. Если ваш основной исходный файл загружает другие файлы, находящиеся в каталоге, эти модули не перезагружаются. Есть способ взломать его:
- создать перезагрузку
- включает перезагрузчик
импорт sys, os.path, имп, возвышенное, возвышенное_плагин BASE_PATH = os.path.abspath(os.path.dirname(__file__)) CODE_DIRS = [ 'plugin_helpers', 'rspec', ] sys.path += [BASE_PATH] + [os.path.join(BASE_PATH, f) для f в CODE_DIRS] ### ======= ### перезагружать файлы плагина при изменении если 'plugin_helpers.reloader' в sys. modules: imp.reload (sys.modules ['plugin_helpers.reloader']) импортировать plugin_helpers.reloader
Вы также можете перезагрузить код при сохранении файла плагина. Он сохраняет основной файл плагина, немного ждет перезагрузки и возвращается к файлу, который вы редактировали.
Использование сторонних модулей
Вы можете импортировать модули только из стандартной библиотеки Python и используйте те, которые предоставляет Sublime Text.
Если вы хотите импортировать сторонний модуль, например. запомнил, вам нужно включить его как зависимость.
Итак, вы находите исходный код модуля, копируете его и опубликовать через PackageControl.
Затем добавьте его в свой проект, используя dependencies.json
файл.
Спасибо 1dleberg за кончик.
Тесты
Нет API или DSL для имитации вызовов Sublime API.
Можно писать модульные тесты с помощью инструментов Python, нет простого способа написать интеграционные.
Контекст
Контекст выполнения, такой как текущее представление и конфигурация, удобно хранить в объект контекста. Он предоставляет доступ к конфигурации проекта и плагина.
Настройки пакета
Вы можете определить пользовательский пакет
- настройки
- раскладки
- меню
- команды запуска
Они должны быть размещены в корневом каталоге плагинов, имена соответствуют правилам. Настройки можно структурировать по платформам, подробнее.
Запуск команд оболочки
Вы можете запускать команды оболочки вручную. Это потребует управления:
- потоками, чтобы не блокировать пользовательский интерфейс
- выходной поток
К счастью, есть команда exec
, подробнее см.
неофициальная документация.
- Исходный код ExecCommand
- Пример кода
- Хэш команды
Упаковка
Как только вы решите, что ваш плагин готов к выпуску, вам необходимо протестировать его.