Notepad ++のテキストを置き換えるために、マクロに「入力」を追加するにはどうすればよいですか?


6

置換機能と相乗作用する「入力」ポップアップダイアログを使用してマクロを作成しようとしています。「テキストの貼り付け->入力を要求->貼り付けられたテキストの変数を入力値に置き換え」のようになります。誰もこれを行う方法を知っていますか?特に変数/入力オプションを見つけることに興味があります。

現在のコード:

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

重要な編集

また、マクロジェネレーターがマクロを生成する方法と同様に、このようなスクリプトを生成する一般的なフォームが必要です。答えをご覧ください。ほとんどすべてのコーディングを削除しました。あなたがしなければならないことは、あなたがそれに覚えておくことができる変数名を持つパターン文字列を作成し、正しいディレクトリに結果のマクロファイルを保存することです。基本的に、ユーザーは値をマクロで貼り付けてから、貼り付けたコンテンツ内の複数の変数を簡単に置き換えることができます。


:私はすでにメモ帳++はsourceforgeのフォーラムでスレッドを掲載している、注意してくださいsourceforge.net/projects/notepad-plus/forums/forum/1290590/...
ウルフパック

入力を求める方法はありません-IIRC。
サティアジスバート

@Sathya PythonScriptプラグインには「Notepad.prompt()」という関数があり、ユーザーに入力を求めますが、「Notepad」と呼ばれるものをインスタンス化する必要があります。どこからインポートするか、またはカスタム関数によってインスタンス化されるかどうかはわかりません。ドキュメントは私に多くの助けではありませんが、それは他の誰かになることがあります。npppythonscript.sourceforge.net/docs/latest/notepad.html
ウルフパック

ただいまたら興味深い、私は見てみましょう...
Sathyajith Bhatさん

1
もしそれを理解したら、答えとして投稿してください。私は別の3時間、少なくともために家ではありません
Sathyajith Bhatさん

回答:


6

最初:

  1. [プラグイン]ドロップダウンメニューに移動します。
  2. を開きますPlugins Manager
  3. PythonScriptNotepad ++用にダウンロードします。
  4. プロンプトで、Notepad ++を再起動します。

次:

  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」変数)。結果のポップアップ入力ボックスで、変数を置換する順序で指定します:( " "、 " ")。

lexis内で本当にしか想像できないものを置き換えるのは面倒だと思ったので、「デフォルト値」関数を入れませんでした。しかし、多くのデータ入力を行い、この種のマクロを必要とする人々のためにデフォルト値を持つことは非常に役立つと思います。誰かがをした場合、私はそれを追加します。


最新バージョン(v6.9.2)でN ++がクラッシュする
-u01jmg3

ごめんなさい。私は海外にいる、または私はより早く応答したでしょう。エラーコードとスクリーンショットを教えてもらえますか?これをテストするつもりです、先生。
Wolfpack'08

2

重要な注意:これは、それ自体にスペースを含む配列項目ごとに1回壊れます。また、2番目の変数に最初の変数が含まれている場合も壊れます(たとえば、[(foo)、(bar)]の代わりに[(bird)、(birds)]および[(var)、(variables)]が機能しない)。

データを貼り付けるファイルがあると仮定します。これを「左ビュー」/操作と呼びます。新しいファイルを作成します。新しいファイルのタブを右クリックし、「他のビューに移動」をクリックします。これを「右ビュー」/「スクラッチパッド」と指定します。ファイルに、次のようにパターンと置換文字列の配列を書き留めます。

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

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

次に、ドロップダウンメニューのマクロに移動します。「マクロの記録」ボタンをクリックして、スクラッチパッドから開始して次のアクションを実行します。

  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+vAlt+a
  7. スクラッチパッドで、配列の先頭にカーソルを置きます(セミコロンで始まる必要があります)。を押しctrl+rightます。を押しdeleteます。

今、Macro->stop recording。これでマクロを再生できます。ループするたびに、パターンを貼り付け、2つの配列値を使い果たしfoobarそれらの配列値を置き換えます。つまり、変数の名前が適切であり、配列項目にスペースが含まれていないと仮定します。マクロ関数のユーティリティに慣れるのに役立ったので、とてもいい解決策です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.