我正在尝试制作一个带有“输入”弹出对话框的宏,该对话框与替换功能协同作用。它应该是这样的:“粘贴文本->要求输入->用输入值替换粘贴文本中的变量”。有人知道怎么做吗?特别想找到一个变量/输入选项。
当前代码:
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
重要编辑
另外,我想要一个可以生成类似这样的脚本的通用表单,类似于宏生成器生成宏的方式。查看答案。我几乎删除了所有的编码。您所要做的就是创建一个模式字符串,其中嵌入您可以记住的变量名,并将生成的宏文件保存在正确的目录中。基本上,它允许用户宏粘贴一个值,然后轻松替换粘贴内容中的多个变量。
答案1
第一的:
- 转到“插件”下拉菜单。
- 打开
Plugins Manager
。 - 下载
PythonScript
Notepad++。 - 根据提示,重新启动 Notepad++。
下一个:
- 转到下拉菜单中的插件。
- 点击
PythonScript -> new script
。 - 使用扩展名保存脚本
.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 默认}:
#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
重要提示:对于每个包含空格的数组项,此操作都会中断一次。如果第二个变量包含第一个变量,它也会中断(例如,[(bird), (birds)] 和 [(var), (variables)] 不能代替 [(foo), (bar)])。
假设您有一个要粘贴数据的文件。我将其称为“左视图”/操作。创建一个新文件。右键单击新文件的选项卡,然后单击“移至其他视图”。我将其指定为“右视图”/“便笺簿”。在文件中,写下模式和替换字符串数组,如下所示。
#Title: Scratchpad
#pattern
I replaced (foo) and (bar) in this pattern.
#array
toe, foot; nose, head; ...; m, n
现在,转到下拉菜单“宏”。单击“录制宏”按钮并从 Scratchpad 开始执行以下操作。
- 按下 突出显示便笺簿中的图案
ctrl+c
。 - 将光标放在操作符中想要粘贴每个新字符串的位置(理想情况下,单击操作符并按
ctrl+end
或ctrl+home
)。按ctrl+v
。 - 在暂存器中,将光标置于数组的开头。按
ctrl+shift+right
。按 ctrl+x。 - 单击操作。按
ctrl+h
。在查找模式中输入“foo”。突出显示替换模式并按ctrl+v
。按alt+a
。 - 单击数组的开头(现在应该以逗号开头)。按
ctrl+right
。按delete
。按。按ctrl+right
。按ctrl+x
。 - 在操作中,
ctrl+h
。查找字符串 foo。替换字符串ctrl+v
。。Alt+a
- 在暂存器中,将光标放在数组的开头(应以分号开头)。按
ctrl+right
。按delete
。
现在,Macro->stop recording
。您现在可以重放宏了。每次循环时,它都会粘贴模式,吃掉 2 个数组值,并用这些数组值替换foo
和bar
。当然,前提是变量命名正确,并且数组项不包含空格。这是一个非常好的解决方案,因为它帮助我习惯了宏函数的实用性。