Введение
Думаю, многим известен
Среди плагинов для
Постановка задачи
Предположим, перед нами стоит следующая задача (взята из жизни).
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"/>
Вот и всё. Теперь даже рутинные действия со сложной логикой можно выполнять одним кликом.
Полезные ссылки: