Notepad ++ - Makro zum Ändern eines bestimmten Teils einer Zeichenfolge

2

Ich möchte ein Notepad ++ - Makro definieren, das eine beliebige Zeichenfolge verwendet, die "foo" enthält, und dessen neue Versionen erstellt, wobei das foo nur in "bar1", "bar2" usw. geändert wird.

also wenn meine datei enthält

abc_foo_def

Wenn ich das Makro starte, möchte ich bekommen

abc_foo_def
abc_bar1_def
abc_bar2_def
abc_bar3_def

Versuch 1

Ich habe versucht, ein Makro mit Ctrl + D(doppelte Zeile) gehen Sie in die unterste Zeile und starten Sie "foo", drücken Sie 3-mal die Entf-Taste, dann schreiben Sie "bar1", wiederholen Sie bis bar3. Beachten Sie, dass selbst wenn dies funktioniert, dies nicht für mehrere "foo" in der Eingabezeile funktioniert. Es funktioniert jedoch nicht wie erwartet.

Versuch 2

Ein anderes Makro wurde mit dem Duplizieren versucht, indem die zweite Zeile Search & Replace "foo" mit "bar" ausgewählt und das In SelectionKontrollkästchen aktiviert wurde. Aber ich denke, es gilt nicht für Makros.

Also suche ich einen zuverlässigen Weg. Danke für jede Hilfe!

PS 1

Ich bin auch in Ordnung mit einer Lösung ohne Notepad ++. (Excel, Word, was auch immer)

PS 2

Meine Eingabezeichenfolge kann mehr als ein "foo" enthalten. Jeder sollte durch "barx" ersetzt werden

Jeff
quelle
Wie oft machst du das mit wie vielen Saiten? Wenn nur ein paar, würde ich einfach die mehrzeiligen Bearbeitungsfunktionen von Notepad ++ ohne Makro verwenden. Wenn viel, können Excel- findund Verkettungsfunktionen Ihre Zeichenfolgen erstellen. Wenn andere Bedingungen erfüllt sind, kann dies ein regulärer Ausdruck in Notepad ++ tun.
Däne
In Abwesenheit einer anderen dieser Lösungen, die für Sie arbeiten, würde ich persönlich ein Python-Skript schreiben, um dies zu tun: sourceforge.net/projects/npppythonscript
Däne
@Dane danke für deine Hilfe. Ich kenne nicht viel Python. Und es könnte eine gute Antwort sein, wenn Sie in Ihrem ersten Kommentar die "mehrzeiligen Bearbeitungsfunktionen" erläutern. In meinem Fall muss ich normalerweise 4 Zeilen hinzufügen, also foo + bar1 zu bar4. Es ist eine kleine Saite, aber ich bin es leid, sie jedes Mal von Hand zu spielen. Tatsächlich ist es eine -lange- MATLAB-Codezeile, die für 5 verschiedene Variablen angewendet wird. foo ist also der Name der ersten Variablen und Balken sind die anderen Variablen.
Jeff

Antworten:

1

Ich bin mir nicht sicher, warum dein Versuch 2 fehlgeschlagen ist. Vielleicht haben Sie beim Aufzeichnen des Makros Ihre Maus verwendet? Ich bin mir ziemlich sicher, dass Sie bessere Ergebnisse erzielen, wenn Sie beim Aufzeichnen eines Makros nur die Tastatur verwenden.

Ich habe gerade das folgende Makro in Notepad ++ 6.6.9 aufgenommen. Es funktioniert für eine variable Anzahl von "foo" -Strings in der Quellzeile.

  • Stellen Sie den Cursor an den Anfang der Quellzeile

Aufzeichnung:

  • Ctrl+D
  • Ctrl+D
  • Ctrl+D
  • Home
  • Shift+End
  • Ctrl+ H(zum Suchen & Ersetzen)
  • Finde "foo" und ersetze es durch "bar1"; wähle "In Auswahl"; klickenReplace All
  • Schließen Sie den Dialog
  • Home
  • Shift+End
  • Ctrl+ H(zum Suchen & Ersetzen)
  • Finde "foo" und ersetze es durch "bar2"; wähle "In Auswahl"; klickenReplace All
  • Schließen Sie den Dialog
  • Home
  • Shift+End
  • Ctrl+ H(zum Suchen & Ersetzen)
  • Finde "foo" und ersetze es durch "bar3"; wähle "In Auswahl"; klickenReplace All
  • Schließen Sie den Dialog

Aufnahme beenden

Hier ist das XML von %AppData%\Notepad++\shortcuts.xml:

<Macro name="SuperUser_Q_Macro" Ctrl="no" Alt="no" Shift="no" Key="0">
  <Action type="0" message="2469" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2469" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2469" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2453" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2300" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2315" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" /> 
  <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="bar1" /> 
  <Action type="3" message="1702" wParam="0" lParam="898" sParam="" /> 
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> 
  <Action type="0" message="2453" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2300" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2315" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" /> 
  <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="bar2" /> 
  <Action type="3" message="1702" wParam="0" lParam="898" sParam="" /> 
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> 
  <Action type="0" message="2453" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2300" wParam="0" lParam="0" sParam="" /> 
  <Action type="0" message="2315" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" /> 
  <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> 
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="bar3" /> 
  <Action type="3" message="1702" wParam="0" lParam="898" sParam="" /> 
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> 
</Macro>
Däne
quelle
Hallo, natürlich habe ich die Tastatur für alle Versuche benutzt. Können Sie mir dieses Makro auf irgendeine Weise senden? Vielleicht wird es irgendwo als XML-Datei gespeichert. Wenn nicht, werde ich Ihre Lösung versuchen. Vielen Dank ! edit: Jetzt schaue ich und sehe, dass der einzige Unterschied darin besteht, dass Sie in jedem S & R "In Auswahl" ausgewählt haben. Vielleicht ist das der Schlüssel.
Jeff