Введение
Думаю, многим известен
Среди плагинов для
Постановка задачи
Предположим, перед нами стоит следующая задача (взята из жизни).
1. В выделенном фрагменте текста (если ничего не выделено — то во всём документе):
- пронумеровать символы '@', находящиеся в начале строки, заменив '@' на '@1', '@2' и т.д.;
- удалить пустые (включая пробелы и табуляцию) строки, идущие подряд по две и более.
3. Если в выделенном фрагменте текста (или во всём документе — в случае если нет выделения) отсутствует символ '@', должно выводиться соответствующее сообщение об ошибке.
4. Должна присутствовать возможность запуска скрипта:
- по нажатию соответствующей кнопки на панели инструментов;
- с помощью клавиатурного сочетания;
- через контекстное меню правой кнопки мыши.
Решение
Для начала нам потребуется установить плагин для
Далее, выбрав в меню
# -*- coding: utf-8 -*- #Скрипт для Notepad++, удаляющий пустые строки и нумерующий символы "@", находящиеся в начале строки # Получаем выделенный текст text = editor.getSelText() isSelection = True # Если текст не выделен, то работаем со всем документом if not text: isSelection = False text = editor.getText() #Находим количество вхождений символа "@", находящегося в начале строки import re occurrencesCount = len(re.findall('^@', text, flags=re.MULTILINE)) # Если в тексте нет ни одного символа "@" в начале строки, выводим сообщение об ошибке if occurrencesCount == 0: notepad.messageBox('В тексте должен присутствовать как минимум 1 символ "@" в начале строки', 'Неверный формат входных данных', MESSAGEBOXFLAGS.ICONEXCLAMATION) # Если символ "@" присутствует, то else: countStartFrom = '' # Выдаём запрос до тех пор, пока не будет введено число while not countStartFrom.isdigit(): countStartFrom = notepad.prompt('Введите число, с которого должна начинаться нумерация вхождений в тексте символа "@":', 'Нумерация вхождений символа "@"', '1') if countStartFrom == None: break if countStartFrom != None: # Удаление пустых строк text = re.sub('\r\n\\s*\r\n', '\r\n', text) # Удаление пустой строки в конце и в начале файла/выделения text = re.sub('\r\n\s*$|^\s*\r\n', '', text, flags=re.MULTILINE) # Переводим countStartFrom из строки в целочисленный тип countStartFrom = int(countStartFrom) # Функция, возвращающая символ "@" с добавленным к нему и увеличенным номером def addNumber(matchobj): global countStartFrom countStartFrom += 1 return '@'+str(countStartFrom-1) #Добавляем нумерацию ко всем символам "@", находящимся в начале строки text = re.sub('^@', addNumber, text, flags=re.MULTILINE) #Заменяем обработанной строкой выделение или весь документ if isSelection: editor.replaceSel(text) else: editor.setText(text)
Если мы назвали скрипт «Empty Lines And Count», то запустить его можно из меню Plugins->Python Script->Scripts->Empty Lines And Count. Чтобы добавить его кнопку на панель инструментов и сделать возможным запуск по клавиатурному сочетанию, в настройках плагина (Plugins->Python Script->Configuration) выбираем созданный нами скрипт и добавляем его в меню и на панель инструментов. Теперь после перезапуска
Назначить скрипту сочетание клавиш можно в меню Settings->Shortcut mapper в разделе Plugin commands.
Чтобы добавить скрипт в контекстное меню
<Item PluginEntryName="Python Script" PluginCommandItemName="Empty Lines And Count" ItemNameAs="Удалить пустые строки и пронумеровать символы '@'"/> <Item id="0"/>

Вот и всё. Теперь даже рутинные действия со сложной логикой можно выполнять одним кликом.
Полезные ссылки: