Como adiciono “input” à minha macro, para substituir o texto no Notepad ++?

6

Estou tentando criar uma macro com uma caixa de diálogo pop-up de "entrada" que funciona em sinergia com o recurso de substituição. Deve ser algo como: "Colar texto- > pedir input- > substituir variável em texto colado com valor de entrada". Alguém sabe como fazer isso? Especialmente interessado em encontrar uma opção de variável / entrada.

Código atual:

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

EDIÇÃO IMPORTANTE

Além disso, quero um formulário geral que gere scripts como esse, da mesma forma que um gerador de macro gera macro. Veja a resposta. Eu tirei quase toda a codificação. Tudo o que você precisa fazer é criar uma string de padrão com nomes de variáveis que você possa se lembrar incorporados a ela e salvar os arquivos de macro resultantes no diretório correto. Basicamente, ele permite que o usuário cole um valor na macro e depois substitua facilmente várias variáveis no conteúdo colado.

    
por Wolfpack'08 09.01.2012 / 06:44

2 respostas

6

Primeiro:

  1. Vá para o menu suspenso "Plug-ins".
  2. Abra o Plugins Manager .
  3. Transfira PythonScript para o Notepad ++.
  4. Por meio do prompt, reinicie o Notepad ++.

Próximo:

  1. Vá para Plug-ins no menu suspenso.
  2. Clique em PythonScript -> new script .
  3. Salve o script com a extensão .py .

Copie e cole este código e edite-o:

#***   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)

Salvar .

Agora, crie um novo arquivo ctrl-n e teste o script. Vá para Plugins->PythonScript->Run Last Script . Se funcionar, você pode colocá-lo em ação no arquivo em que está trabalhando.

Por conveniência, eu fiz ctrl-shift-e uma tecla de atalho para o comando Run Previous Script (#yourscriptname.py) . No menu suspenso, vá para Configurações -> Mapeador de Atalhos . Clique na guia Plugin commands . Perto do final, Run Previous Script . Muito útil.

Curiosamente, você pode usar esse script para se duplicar para diferentes padrões. Eu realmente gostaria de saber como tornar isso possível. Por favor, veja a edição da minha pergunta.

EDIÇÃO IMPORTANTE

O código abaixo fará com que seu Notepad ++ crie seus próprios scripts. Execute este script e salve o arquivo no diretório c:/program files/Notepad++/plugins/config/PythonScript/scripts { padrão do Windows }:

#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.

Ele fará com que você possa importar strings que você costuma colar em seu arquivo, junto com variáveis que você geralmente precisa substituir. Escreva seu padrão de entrada com variáveis (por exemplo,

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

Quando você executa o script, especifica esse padrão de entrada no primeiro pop-up. Você então especifica o número de variáveis no padrão de entrada: foo e bar (por exemplo, variáveis "2"). Nas caixas de entrada pop-up resultantes, você especifica as variáveis na ordem em que gostaria de substituí-las: (" foo ", " bar " ).

Eu não coloquei uma função de 'valor padrão' porque achei que seria chato substituir o que eu posso imaginar ser realmente aleatório dentro do léxico. Eu acho que seria muito útil ter valores padrão para pessoas que fazem muita entrada de dados e precisam desse tipo de macro, no entanto. Se alguém fizer uma solicitar para uma, eu a adicionarei.

    
por 28.02.2016 / 10:10
2

Observação importante: isso é interrompido uma vez para cada item da matriz que contém espaços dentro de si. Ele também quebra se a segunda variável contiver as primeiras variáveis (por exemplo, [(pássaro), (pássaros)] e [(var), (variáveis)] não funcionam no lugar de [(foo), (bar)]).

Suponha que você tenha um arquivo no qual deseja colar dados. Vou chamá-lo de "Left View" / Operativo. Crie um novo arquivo. Clique com o botão direito do mouse na guia do novo arquivo e clique em "Mover para outra visualização". Eu designarei isto como "Vista direita" / "Bloco de notas". No arquivo, coloque o padrão e o array de strings de substituição, como este.

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

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

Agora, vá para o menu suspenso Macro. Clique no botão "Gravar macro" e execute as seguintes ações, iniciando no Scratchpad.

  1. Realce o padrão no scratchpad, pressione ctrl+c .
  2. Posicione o cursor onde você deseja que cada nova sequência seja colada na operativa (idealmente, clique na operação e pressione ctrl+end ou ctrl+home ). Pressione ctrl+v .
  3. No scratchpad, coloque o cursor no início da matriz. Pressione ctrl+shift+right . Pressione ctrl + x.
  4. Clique no operativo. Pressione ctrl+h . Insira 'foo' no padrão de localização. Realce o padrão de substituição e pressione ctrl+v . Pressione alt+a .
  5. Clique no início da matriz (agora deve começar com uma vírgula). Pressione ctrl+right . Pressione delete . Pressione ctrl+right . Pressione ctrl+x .
  6. Na operação, ctrl+h . Encontre string foo. Cadeia de substituição ctrl+v . Alt+a .
  7. No scratchpad, coloque o cursor no início da matriz (deve começar com um ponto e vírgula). Pressione ctrl+right . Pressione delete .

Agora, Macro->stop recording . Agora você pode reproduzir a macro. Ele colará o padrão, consumirá dois dos valores da matriz e substituirá foo e bar pelos valores da matriz, sempre que percorrer. Isto é, obviamente, assumindo que as variáveis são nomeadas bem, e os itens da matriz não contêm espaços. É uma solução muito boa porque me ajudou a me acostumar com a utilidade da função macro.

    
por 12.01.2012 / 14:44