Введение в Sublime Text и разработку плагинов

Sublime Text с его элегантным интерфейсом и молниеносной производительностью стал фаворитом среди разработчиков. Одна из главных причин его популярности — обширная библиотека плагинов, которые могут превратить его в мощный инструмент для любого языка программирования, включая Python. В этой статье мы погрузимся в мир разработки плагинов для Sublime Text, сосредоточившись на том, как создавать и настраивать плагины для улучшения вашего опыта разработки на Python.

Настройка среды Прежде чем углубляться в разработку плагинов, убедитесь, что у вас установлен Sublime Text и настроен для разработки на Python. Вот основные шаги:

  1. Установка Package Control: Package Control является основой управления плагинами в Sublime Text. Чтобы установить его, следуйте этим шагам:

    • Откройте консоль Sublime Text, перейдя в «Вид» → «Показать консоль».
    • Введите следующий код в консоль и нажмите Enter:
    import urllib.request,os,hashlib; h = '6f4c264a24d933ce0547f23659ba2e5d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.download('http://packagecontrol.io/' + pf.lower(), ipp + '/' + pf); load_settings = lambda: sublime.load_settings('Package Control.sublime-settings'); s = load_settings(); s.set('bootstrapped', True); sublime.save_settings('Package Control.sublime-settings'); print('Please restart Sublime Text to finish installation')
    
    • Перезапустите Sublime Text.
  2. Основные плагины для разработки на Python: Чтобы сделать Sublime Text надёжной средой для разработки на Python, вам понадобится несколько ключевых плагинов.

    • MagicPython и SublimeJEDI:
      • MagicPython улучшает подсветку синтаксиса Python, особенно для новых функций. Установите его через Package Control («Настройки» → «Управление пакетами» → «Установить пакет» → MagicPython).
      • SublimeJEDI незаменим для автодополнения. Он использует движок JEDI, который также используется в IPython. Для настройки вам необходимо настроить параметры проекта, чтобы указать на интерпретатор Python и пути к пакетам проекта:
      {
          "settings": {
              "python_interpreter": "~/Projects/<project>/.venv/bin/python",
              "python_package_paths": ["~/Projects/<project>"]
          }
      }
      
    • SublimeLinter: Для линтинга вы захотите установить SublimeLinter вместе с SublimeLinter-flake8 и SublimeLinter-contrib-mypy. Эти плагины помогают выявлять ошибки и предупреждения в вашем коде. Настройте линтеры для использования исполняемых файлов из виртуальной среды проекта:
      {
          "settings": {
              "SublimeLinter.linters.flake8.executable": "~/Projects/<project>/.venv/bin/flake8",
              "SublimeLinter.linters.mypy.executable": "~/Projects/<project>/.venv/bin/mypy"
          }
      }
      
    • Другие полезные плагины:
      • black — для автоматического форматирования файлов Python;
      • DocBlockr — упрощает написание комментариев в коде;
      • GitGutter — помогает отслеживать изменения в файлах, облегчая управление кодовой базой.
  3. Создание собственного плагина: Теперь, когда ваша среда настроена, давайте создадим простой плагин, чтобы вы могли начать работу.

    1. Создайте новую папку для плагина:
    • Перейдите в «Настройки» → «Обзор пакетов», чтобы открыть каталог «Пакеты».
    • Создайте новую папку для вашего плагина, например, MyPythonPlugin.
    1. Создайте основной файл плагина:
    • Внутри папки плагина создайте файл с именем init.py. Этот файл будет содержать основную логику вашего плагина.
    1. Добавьте код плагина:
    • Вот пример простого плагина, добавляющего команду для вывода сообщения в консоль:
    import sublime
    import sublime_plugin
    
    class MyPythonPluginCommand(sublime_plugin.TextCommand):
        def run(self, edit):
            print("Hello from MyPythonPlugin!")
            self.view.insert(edit, self.view.sel().begin(), "Hello from MyPythonPlugin!")
    
    1. Зарегистрируйте команду:
    • Создайте файл с именем Default.sublime-commands в папке плагина и добавьте следующее содержимое:
    [
        {
            "caption": "MyPythonPlugin: Hello",
            "command": "my_python_plugin"
        }
    ]
    
    1. Добавьте привязку клавиш (необязательно):
    • Чтобы связать клавишу с вашей командой, откройте «Настройки» → «Привязки клавиш» и добавьте следующее:
    [
        {
            "keys": ["ctrl+shift+h"],
            "command": "my_python_plugin"
        }
    ]
    

Пример плагина: Auto-Importer Давайте создадим плагин, который автоматически добавляет операторы импорта для используемых вами модулей.

Пошаговая инструкция:

  1. Создайте папку и файлы плагина: Следуйте инструкциям выше, чтобы создать новую папку плагина, например, AutoImporter.
  2. Напишите код плагина: В init.py добавьте следующий код:
import sublime
import sublime_plugin
import re

class AutoImporterCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        # Получить текущий контент представления
        content = self.view.substr(sublime.Region(0, self.view.size()))

        # Найти все имена модулей, используемые в коде
        module_names = re.findall(r'\b(\w+)\.', content)

        # Создать операторы импорта
        import_statements = []
        for module in set(module_names):
            import_statements.append(f"import {module}")

        # Вставить операторы импорта в начало файла
        self.view.insert(edit, 0, '\n'.join(import_statements) + '\n\n')
  1. Зарегистрируйте команду: Создайте Default.sublime-commands и добавьте:
[
    {
        "caption": "AutoImporter: Add Imports",
        "command": "auto_importer"
    }
]
  1. Добавьте привязку клавиатуры: Откройте «Настройки» → «Привязки клавиатуры» и добавьте:
[
    {
        "keys": ["ctrl+shift+i"],
        "command": "auto_importer"
    }
]