6

Я пытаюсь создать макрос с помощью всплывающего диалогового окна «input», которое взаимодействует с функцией замены. Он должен выглядеть примерно так: «Вставить текст-> запросить ввод-> заменить переменную в вставленном тексте значением ввода». Кто-нибудь знает как это сделать? Особенно интересует поиск переменной / входной опции.

Текущий код:

import * from npp
my_prompt = Notepad()
initial_string="""

  THIS IS A HUGE
  STRING
  WITH COMMENTS
  AND FUNCTIONS
  AND
    NESTING
    MISSPELLEDD WORDS
    VARIABLES
  ALL KINDS OF CRAZY STUFF"""


print initial_string
user_replacement_string=Notepad.prompt(my_prompt) //RuntimeError: This class cannot be instantiated from Python
Editor.replace("varr", user_replacement_string) //untested

ВАЖНОЕ РЕДАКТИРОВАНИЕ

Кроме того, я хочу общую форму, которая генерирует подобные сценарии, аналогично тому, как генератор макросов генерирует макрос. Смотрите ответ. Я вынул почти всю кодировку. Все, что вам нужно сделать, это создать строку шаблона с именами переменных, которые вы можете запомнить, встроенные в нее, и сохранить полученные макрофайлы в нужном каталоге. По сути, он позволяет пользователю вставлять значение в макрос и затем легко заменять несколько переменных в вставленном контенте.

2 ответа2

6

Первый:

  1. Перейдите в раскрывающееся меню "Плагины".
  2. Откройте Plugins Manager .
  3. Загрузите PythonScript для Notepad++.
  4. Через приглашение перезагрузите Блокнот ++.

Следующий:

  1. Перейти к плагинам в раскрывающемся меню.
  2. Нажмите PythonScript -> new script .
  3. Сохраните скрипт с расширением .py .

Скопируйте и вставьте этот код, затем отредактируйте его:

#***   IMPORTS   ***
from Npp import *

#*** DEFINITIONS ***
#*** http://docs.python.org/release/1.4/tut/node70.html (.h triple-string variables)***
initial_string="""

  THIS IS A HUGE
  STRING
  WITH COMMENTS
  AND FUNCTIONS
  AND
    NESTING varr
    MISSPELLEDD WORDS
    VARIABLES Varr
  ALL KINDS OF CRAZY STUFF""" 

#***  I am using a case-sensitive replacement;     ***
#***  therefore, I use two replacement operations  ***

#***  First replacement, lowercase ***
print initial_string
user_replacement_string=notepad.prompt(notepad, 'Replace', "")

#*** Second replacement, uppercase ***
editor.replace("varr", user_replacement_string) 
user_replacement_string=notepad.prompt(notepad, 'Replace', "")
editor.replace("Varr", user_replacement_string)

Сохранить

Теперь создайте новый файл ctrl-n и протестируйте скрипт. Перейдите в Plugins->PythonScript->Run Last Script . Если это работает, вы можете применить его к файлу, над которым работаете.

Для удобства я сделал ctrl-shift-e сочетанием клавиш для команды « Run Previous Script (#yourscriptname.py) . В раскрывающемся меню выберите « Настройки» -> Ярлык ярлыков» . Перейдите на вкладку « Plugin commands ». Ближе к концу, Run Previous Script . Очень кстати.

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

ВАЖНОЕ РЕДАКТИРОВАНИЕ

Приведенный ниже код сделает так, что ваш Notepad++ будет создавать свои собственные скрипты. Запустите этот скрипт и сохраните файл в каталоге c:/program files/Notepad++/plugins/config/PythonScript/scripts { Windows default }:

#imports
from Npp import *
#variables
pattern_string=notepad.prompt(notepad, 'Pattern String')
number_of_replacements=int(notepad.prompt(notepad, 'Number of Replacements'))
variable_to_replace = []
replacement_title = []
the_header = """#imports
from Npp import *

#definitions
"""
a = "pattern_string = """ + '"' + '""' + pattern_string + '""' + '"'
b = """

print pattern_string
user_replacement_string"""
c = """=notepad.prompt(notepad, 'Replace', "Replaces: """
d = '"' + """)
editor.replace(""" + '"'
e = """", user_replacement_string"""
f = ")"
#function
for i in range (0, number_of_replacements):
    replacement_title.append(str("Replacement Item ") + str(i+1))
    variable_to_replace.append(notepad.prompt(notepad, replacement_title))

print the_header + a
print b + str(i) + c + variable_to_replace[i] + d + variable_to_replace[i] + e + str(i) + f
#thanks Wolfpack08.

Это позволит импортировать строки, которые вы часто вставляете в ваш файл, вместе с переменными, которые вам часто приходится заменять. Напишите ваш шаблон ввода с переменными (т.е.

This is my stupid input pattern foo, and I use the common variable bar .

Когда вы запускаете скрипт, вы указываете этот шаблон ввода в первом всплывающем окне. Затем вы указываете количество переменных в шаблоне ввода: foo и bar (например, "2" переменные). В появившихся всплывающих полях ввода вы указываете переменные в том порядке, в котором вы хотите их заменить: (" ", " ").

Я не вставил функцию «значение по умолчанию», потому что думал, что будет неприятно заменить то, что я могу себе представить, быть действительно внутри лексики. Я думаю, что было бы очень полезно иметь значения по умолчанию для людей, которые много вводят данные и нуждаются в этом виде макросов. Если кто-то сделает на один, я добавлю его.

2

Важное примечание: это разбивается один раз для каждого элемента массива, который содержит пробелы внутри себя. Он также прерывается, если вторая переменная содержит первые переменные (например, [(птица), (птицы)] и [(переменная), (переменные)] не работают вместо [(foo), (bar)]).

Предположим, у вас есть файл, в который вы хотите вставить данные. Я назову это "левый взгляд"/ оперативный. Создать новый файл. Щелкните правой кнопкой мыши вкладку нового файла и нажмите "Перейти к другому виду". Я обозначу это как "Правильный обзор"/ "Скретчпад". В файле запишите шаблон и массив строк замены, как это.

#Title: Scratchpad
#pattern
I replaced (foo) and (bar) in this pattern.

#array
toe, foot; nose, head; ...; m, n

Теперь перейдите в выпадающее меню Macro. Нажмите кнопку "Запись макроса" и выполните следующие действия, начиная с нуля.

  1. Выделите рисунок в блокноте и нажмите ctrl+c
  2. Поместите курсор туда, где вы хотите, чтобы каждая новая строка была вставлена в оперативе (в идеале, щелкните на операционе и нажмите ctrl+end или ctrl+home). Нажмите ctrl+v
  3. В блокноте установите курсор на начало массива. Нажмите ctrl+shift+right . Нажмите Ctrl + X.
  4. Нажмите на оперативу. Нажмите ctrl+h Введите 'foo' в шаблон поиска. Выделите шаблон замены и нажмите ctrl+v . Нажмите alt+a .
  5. Нажмите на начало массива (теперь должно начинаться с запятой). Нажмите ctrl+right . Нажмите delete . Нажмите ctrl+right . Нажмите ctrl+x
  6. В рабочем состоянии ctrl+h . Найдите строку foo. Строка замены ctrl+v . Alt+a .
  7. В блокноте поместите курсор в начало массива (должен начинаться с точки с запятой). Нажмите ctrl+right . Нажмите delete .

Теперь Macro->stop recording . Теперь вы можете воспроизвести макрос. Он вставит шаблон, съедает 2 значения вашего массива и заменяет foo и bar этими значениями массива каждый раз, когда проходит цикл. Это, конечно, при условии, что переменные имеют правильные имена, а элементы массива не содержат пробелов. Это очень хорошее решение, потому что оно помогло мне привыкнуть к утилите макроса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .