Skip to content

Latest commit

 

History

History
169 lines (116 loc) · 12.5 KB

File metadata and controls

169 lines (116 loc) · 12.5 KB

NppPyInline — это встраиваемый инструмент, который превращает текстовый редактор Notepad++ в среду инлайн-вычислений. Он позволяет выполнять Python-код прямо внутри текстового буфера Scintilla с мгновенным выводом и обновлением результатов в тех же строках или в специально отведенном месте.

Вы пишете код прямо в тексте, запускаете скрипт и получаете результат вычислений. Исправили ошибку или изменили исходные данные — перезапустили скрипт, и результаты обновились. В отличие от стандартной консоли, код набирается один раз, сохраняется в файле, и вы можете работать с ним столько, сколько нужно.


🚀 Быстрый старт (Как это работает)

Каждый блок вычислений обрамляется ключевыми словами _beg_ и _end_. Результат можно вывести прямо в строке с помощью оператора ? или сгруппировать в конце с помощью out().

Пример 1: Простые вычисления Находим гипотенузу прямоугольного треугольника и вычисляем синусы углов.

_beg_
a = 5
b = 50

# ?.4 - оператор печати (округление до 4 знаков)
c = (a**2 + b**2)**0.5 ?.4 50.2494

# out() выводит данные единым блоком после end
# out(f"Гипотенуза = {c:.2f}")         # Только для Python 3
out("Гипотенуза = {:.2f}".format(c))

sin_a = a / c
# out(f"sin_a = {sin_a:.5f}")          # Только для Python 3
out("sin_a = {:.5f}".format(sin_a))

sin_b = b / c
# out(f"sin_b = {sin_b:.5f}")          # Только для Python 3
out("sin_b = {:.5f}".format(sin_b))
_end_
# > Гипотенуза = 50.25
# > sin_a = 0.09950
# > sin_b = 0.99504

Пример 2: Использование длинных строк С помощью обратного слэша длинную строку можно разбить на несколько более коротких.

_beg_
a = 1.1
b = 2.1
c = 3.1
d = (sin(a+b)- cos(a-b))*2 + (sin(a+c)- cos(a-c))*3 + (sin(a+c)- cos(a-c))*2
d ? -3.474498

e = (sin(a+b)- cos(a-b))*2 \
  + (sin(a+c)- cos(a-c))*3 + \
(sin(a+c)- cos(a-c))*2
e ? -3.474498
_end_

Пример 3: Работа с коллекциями и модулями Поэлементное умножение случайно сгенерированных списков.

_beg_
import random

my_tuple = tuple(random.randint(1, 10) for _ in range(10))
my_list = [random.randint(1, 10) for _ in range(10)]
result = [my_tuple[i] * my_list[i] for i in range(10)]

# Определение однострочной функции
def get_stats(data): return min(data), max(data), sum(data) / float(len(data))

result_min, result_max, result_mean = get_stats(result)
out("РЕЗУЛЬТАТ: мин={}, макс={}, среднее={:.2f}".format(result_min, result_max, result_mean))
_end_
# > РЕЗУЛЬТАТ: мин=4, макс=72, среднее=41.40

💡 Больше примеров: Более 60 примеров использования различных аспектов среды собраны в файлах examples2.md (для Python 2) и examples3.md (для Python 3). Большинство примеров одинаковы для обоих версий.


📥 Установка и запуск

Системные требования:

  • Редактор Notepad++ (протестировано на версии 8.9.3 64-bit).
  • Плагин PythonScript. NppPyInline универсален и поддерживает как версии плагина (Python 3.14+), так и (Python 2.7+) - два отдельных скрипта.

Шаги установки:

  1. Установите плагин Python Script через менеджер плагинов Notepad++: Плагины (Plugins) → Управление плагинами... (Plugins Admin). Найдите в списке PythonScript и установите его.
  2. Плагин PythonScript при первом использовании не всегда автоматически создает нужную папку scripts. Поэтому сделайте следующее:
  • При обычной установке Notepad++: скрипты нужно положить в %APPDATA%\Notepad++\plugins\config\PythonScript\scripts
  • При Portable версии Notepad++: скрипты нужно положить в (папка с notepad++.exe)\plugins\config\PythonScript\scripts
  • Если папки PythonScript\scripts нет — создайте их вручную. В каталог scripts положите файл скрипта (например, npp_py_inline2.py).
  1. Перейдите в главное меню: Плагины → Python Script → Configuration.... Добавьте загруженный вами скрипт из секции User Scripts в секцию Menu items. Перезапустите Notepad++.
  2. Назначьте клавишу быстрого доступа для запуска скрипта. Для этого перейдите в главное меню: Опции → Горячие клавиши → Плагины (в русской версии). Обычно ближе к концу таблицы вы найдете ваш скрипт. Установите для него удобную комбинацию клавиш.

Как узнать свою версию Python в Notepad++? В главном меню выберите Плагины -> Python Script -> Show Console. В первой же строчке открывшейся внизу консоли будет указана точная версия интерпретатора (например, Python 3.14.3 или Python 2.7.18).

Как использовать:

  1. Напишите код между _beg_ и _end_ в любом текстовом файле.
  2. Поставьте курсор на любую строку внутри этого блока.
  3. Выполните скрипт.

⚙️ Техническое описание и архитектура

NppPyInline работает поверх текстового буфера Scintilla (в Notepad++) и использует встроенные функции Python (eval и exec). Математика, переменные и типы данных работают точно так же, как в стандартном Python.

Однако NppPyInline не является полноценным интерпретатором Python. Его архитектура основана на строгом построчном выполнении. Главный цикл берет одну строку, передает парсеру, затем вычислителю и форматеру. Отсюда вытекают жесткие ограничения среды.

🚫 Ограничения (Чего делать нельзя)

  1. Нет многострочных управляющих конструкций: Классические if/elif/else, for, while в несколько строк не поддерживаются.
  2. Нет многострочного объявления функций/классов: Блочные def и class недопустимы.
  3. Нет стандартного I/O: Функции print() и input() отключены, так как у среды нет консоли — интерфейсом является сам текст.

Допустимые альтернативы:

  • Вместо блочного if используйте тернарный оператор или запись в одну строку: if x > 0: y = 10.
  • Вместо блочных def используйте lambda или однострочные функции: def func(x,y): return (x2 + y2).

🛡️ Изоляция блоков кода

Блоки кода, заключенные между _beg_ и _end_, полностью независимы. При каждом новом запуске блока его окружение (состояние переменных) создается с нуля, а по завершении выполнения — уничтожается. Данные из одного блока недоступны в другом.


🛠 Инструменты вывода

Оператор (?)

Печатает результат вычисления прямо в строке кода. Имеет флаги модификации:

  • ? — базовый вывод: x = 10 / 3 ? 3.333333333
  • ?.N — округление до N знаков: pi_val = math.pi ?.2 3.14
  • ?h — вывод в HEX формате: mask = 255 ?h 0xff
  • ?b — вывод в бинарном формате: flags = 5 ?b 0b101

Блочный вывод (out и row)

Формирует вывод в самом конце блока (после _end_).

  • out(*args) — аналог print(). Склеивает аргументы через пробел.
  • row(title, *rows) — формирует красивую ASCII-таблицу. Принимает заголовок и итерируемые объекты (минимум 2 элемента).

При повторном запуске скрипта старые результаты автоматически удаляются, а на их место записываются новые. Ошибки синтаксиса или выполнения печатаются прямо в проблемной строке и так же удаляются после исправления.


🎛 Системные переменные (Режимы)

Управлять поведением NppPyInline можно, объявляя специальные переменные внутри блока _beg_ ... _end_. Режимы действуют только локально внутри конкретного блока.

  • _digits_ = N — устанавливает глобальное количество знаков после запятой для текущего блока вычислений (по умолчанию 10).
  • _clean_ = 1 — принудительно удаляет все ранее распечатанные результаты текущего блока. (Сообщения об ошибках остаются до их устранения).
  • _debug_ = 1 — включает режим отладки. Результаты всех операций выводятся принудительно, даже если не установлен оператор ?.
  • _bitwise_ = 1Внимание: изменяет стандартный синтаксис Python! Логические операторы and и or заменяются на побитовые & и |. Также становится доступным ключевое слово xor. Режим включается локально только по явному запросу пользователя.

📚 Встроенная справочная система

Библиотека _math_ загружается в среду автоматически.

  • Вызов _help_ (или _help_ all) откроет новую вкладку в Notepad++ со списком всех функций библиотеки math.
  • Вызов _help_ <имя_функции> (например, _help_ sin) извлечет __doc__ и выведет подробную документацию по конкретному объекту.
  • Ключевое слово _man_ на пустой строке автоматически откроет или создаст файл npp_py_inline.txt в соседней вкладке — это ваша личная шпаргалка для заметок.