Suchen und Ersetzen durch ein Multifile-Projekt in AUCTeX?


8

Ich bin dabei, Emacs als einzigen Editor zu übernehmen, den ich für alles, was ich schreibe, einschließlich LaTeX-Dokumenten, verwende. Ich kam vom WYSIWYG-Editor, der diesem Zweck ziemlich gut diente, nämlich TexStudio oder kurz TXS. Für den Übergang von TXS zu Emacs fehlt mir immer noch die Art und Weise, wie TXS mit der Ausführung einer massiven Regexp-Abfragesuche umgeht und diese ersetzt, indem die Übereinstimmungen hervorgehoben und die Suche nur auf diese projektbezogenen .texDateien beschränkt wird. Das vermisse ich jetzt in Emacs sehr. Unten sehen Sie einen Screenshot von TXS:

TeXStudio-Abfrage in einem Multifile-LaTeX-Projekt Geben Sie hier die Bildbeschreibung ein

Ich möchte die Punkte im Workflow hervorheben, die in Emacs erreicht werden sollen:

  1. RegExp-Abfragesuche und -ersetzung nur in den projektbezogenen .texDateien.
  2. Markieren Sie die Übereinstimmungen
  3. Eine Übersicht über die hervorgehobenen Ergebnisse in einem überschaubaren Layout (ähnlich der Protokollansicht von Magitin Emacs, wenn Sie drücken, lgefolgt von einem anderen loder einfach wie C-x dim Dired-Modus
  4. Erfahren Sie, wie viele Ersetzungs- oder Inspektionsübereinstimmungen mit oder verbleibende Übereinstimmungen durchgeführt wurden und wie Sie die Abfrage fortsetzen können, falls sie durch einen ungeschickten Tastendruck unterbrochen wird, der die Abfrage stoppt
  5. Ein sauberer Ausweg aus dieser chaotischen Abfrage, indem Sie alle zugehörigen Dateien schließen und speichern und in den Status zurückkehren, bevor Sie diese Abfrage aufrufen

Ich habe diesen Beitrag gelesen, aber meine Absicht ist es, CWdass jeder seinen besten Workflow teilen kann, um diesen gemeinsamen Job zu erledigen. Meine aktuellen Ansätze lauten wie folgt:

Erster Workflow

  1. Der Dired-Modus % gmarkiert alle Dateien, die diesen regulären Ausdruck enthalten. Nachteile: Dies schließt auch Dateien ein, die nicht mit dem Projekt zusammenhängen, einschließlich Nicht-.tex-Dateien.
  2. C-x 3 öffnet einen neuen Puffer und behält dabei den ersten Puffer im Auge, um zu überprüfen, welche markierten Dateien ich im neuen Puffer einzeln abfragen muss
  3. Ausführen der Abfrage durch C-c q. Es hat sehr schöne Schalter wie !alle ersetzen ohne zu fragen und Übereinstimmungen in der geöffneten Datei hervorzuheben. Dies bedeutet jedoch, dass ich jedes Mal und für jede markierte Datei dieselbe Abfrage ausführen muss.
  4. Nachdem ich alle markierten Dateien erstellt habe, drücke ich C-x s !, um alle auf einen Schlag zu speichern. Puh!

Geben Sie hier die Bildbeschreibung ein

Zweiter Workflow - bevorzugt

  • Das Markieren aller .texDateien % mim Dired-Modus durch Regexp, um nur .texDateien zu markieren , damit ich im Grunde genommen ausgeführt \.texwerde, bringt mich dorthin.
  • C-x 3 Wie oben, um einen Puffer für die Übersicht und den anderen für die Abfrage zu behalten
  • Die Ausführung Qinnerhalb von Dired (Abfrage) ersetzt reguläre Ausdrücke nur in markierten Dateien. Alternativ Aist nur Regexp-Suchabfrage. Eine vollständige Abfrage wird ausgeführt und ein Hilfemenü von ?wird großzügig bereitgestellt
  • C-x s !Speichern und schließen Sie das ganze Chaos. Ansonsten musste ich die geöffneten Dateien einzeln schließen, was mühsam ist. Ich hoffe, es gibt eine Möglichkeit, nur die zu schließen, die wir gestört haben.

Geben Sie hier die Bildbeschreibung ein

Wie approximiere ich die Regexp-Such- / Ersetzungsabfrage von TXS in mehreren Dateien?

Hinweis

  • Emacs 24.4 unter Windows 7

Diese Frage hat derzeit ein "enges" Votum dafür, zu breit zu sein, dem ich eher zustimmen möchte. Könnten Sie bitte die Frage auf eine diskretere Version eingrenzen (möglicherweise im Sinne von "Wie approximiere ich die Regexp-Abfragesuche von TeXStudio in mehreren Dateien")? "Was ist Ihr bester Workflow?" ist sehr breit und wird wahrscheinlich lange und meinungsbasierte Antworten liefern.
Dan

Ich kann momentan keine vollständige Antwort schreiben, aber Sie sollten sich mit wgrep befassen.
Malabarba

@Malabarba, bitte erwägen Sie, Ihren Kommentar auf eine Antwort zu aktualisieren, wenn Sie der Meinung sind, dass dies die im Beitrag genannten Kriterien erfüllt.
Promotion am

Antworten:


3

Wenn ich richtig verstanden habe, dass Sie in Ihrem Projekt nach Textmustern suchen möchten, möchten Sie möglicherweise Projectile zusammen mit Helm verwenden.

  • M-x helm-projectile-grep
  • Geben Sie ein Textmuster oder ein Regex-Muster ein.
  • Siehe aktualisierte Ergebnisse für jedes eingegebene Zeichen.

Hier ist eine Demo von helm-projectile-grep:

helm-projectile-grep

Sie können in einem separaten Puffer speichern, um später mit Save results in grep bufferaction` zu verweisen (Sie wechseln TABstandardmäßig mit zu action buffer ).

Wenn Sie noch nichts von Helm gehört haben, können Sie mein Helm-Tutorial lesen . Weitere Demos und Anleitungen zu Helm Projectile finden Sie in meinem Helm Projectile-Tutorial .

Alternativ können Sie auch Folgendes verwenden rgrep:

  • M-x rgrep
  • Geben Sie ein Text- / Regex-Muster in die Search for:Eingabeaufforderung ein, dh "Test".
  • Geben Sie den Dateityp für in suchen Search for "test" in file:, das heißt *.tex.
  • Geben Sie das Verzeichnis für die rekursive Suche ein (daher der Name rgrep).
  • Drücken Sie RETund sehen Sie die Ergebnisse.

Eine rgrepDemo:

Geben Sie hier die Bildbeschreibung ein

In Bezug auf Ihre Kriterien:

  1. RegExp-Abfragesuche und -ersetzung nur in den projektbezogenen .texDateien.

Sowohl Helm als auch rgrepunterstützen diese Funktion.

  1. Markieren Sie die Übereinstimmungen

Das gleiche wie oben.

  1. Eine Übersicht der hervorgehobenen Ergebnisse in einem überschaubaren Layout

Das gleiche wie oben.

  1. Erfahren Sie, wie viele Ersetzungs- oder Inspektionsübereinstimmungen mit oder verbleibende Übereinstimmungen durchgeführt wurden und wie Sie die Abfrage fortsetzen können, falls sie durch einen ungeschickten Tastendruck unterbrochen wird, der die Abfrage stoppt

Wenn Sie Übereinstimmungen ersetzen möchten, können Sie mit wgrep einen *Grep*Puffer ersetzen . Sobald Sie den *Grep*Puffer fertiggestellt und wieder synchronisiert haben , wird alles gemäß dem von Ihnen ersetzten Text ersetzt.

Sie "setzen" fort, indem Sie die Abfrage erneut ausführen, wenn Sie sie versehentlich stoppen. Mit Helm haben Sie jedoch einen helm-resumeBefehl, mit dem Sie zum vorherigen Betrieb zurückkehren können, wenn Sie ihn versehentlich abbrechen.

  1. Ein sauberer Ausweg aus dieser chaotischen Abfrage, indem Sie alle zugehörigen Dateien schließen und speichern und in den Status zurückkehren, bevor Sie diese Abfrage aufrufen

Eigentlich müssen Sie keinen Puffer töten, wenn Sie Werkzeuge wie helm-mini verwenden . Das Verwalten von Tausenden offener Puffer ist ein Kinderspiel: Sie können die Puffer mit einem kurzen Textmuster auf Ihre Wunschpuffer eingrenzen. Sie können alle auf einmal töten, wenn Sie wollen.

Hier ist eine Demo von helm-mini:

Helm-Mini

Weitere Informationen finden Sie auf der Helm Github-Seite im Abschnitt "Erweiterte Verwendung" .


Ich denke, ich muss versuchen, Projektil mit Helm zu studieren. Vielen Dank für Ihre Screenshots-reichen Tutorials!
Promotion am

welche Pakete ich brauche diese anständigen Funktionen kennen zu installieren: projectile, helmund helm-projectileliegt auf der Hand, was sonst? Außerdem gibt es hier zwei MELPA-Pakete helm-pojectileund helm projectile-allEmpfehlungen?
Promotion am

Das reicht schon. Folgen Sie dann der Konfiguration in meinen Handbüchern. Sie sollten den InstallationAbschnitt in meinen Handbüchern zu Helm und Helmprojektil überprüfen .
Tu Do

Mit welchen Tastenanschlägen rgrepbesuchen Sie die Übereinstimmungsereignisse (vorwärts oder rückwärts) im oberen und unteren Puffer?
Promotion am

1
Es war eine Emacs-wechselnde Erfahrung, Helm und Helmprojektil zu treffen. Danke! Aber die Grep-Suche funktioniert nicht. Können Sie sich bitte diesen Beitrag ansehen
Promotion

5

Wenn ich verstanden habe, was Sie wollen, sollte RefTeX ' reftex-isearch-minor-modedas sein, wonach Sie suchen . Aus seiner Beschreibung im Handbuch:

Schalten Sie einen Nebenmodus um, mit dem die inkrementelle Suche global für das gesamte Dokument mit mehreren Dateien ausgeführt werden kann. Dateien werden in der Reihenfolge durchsucht, in der sie im Dokument angezeigt werden.

Wie berichtet von T. Verron, wie gut das funktioniert mit regexps.

Fügen Sie Ihrer Init-Datei eine der folgenden Zeilen hinzu, um diesen Nebenmodus in allen * TeX-Puffern zu aktivieren

(add-hook 'TeX-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for AUCTeX
(add-hook 'tex-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for the Emacs' bultin TeX mode.

Gut zu wissen, wie ich Reftex benutze. Da jedoch kein regulärer Ausdruck unterstützt wird, bezweifle ich, dass dieser Ansatz besser wäre!
Promotion am

2
Anscheinend wechselt das Drücken M-rdes Suchpuffers zur Regexp-Suche, genau wie bei der regulären Suche isearch.
T. Verron

1
Und die übliche Verknüpfung für regexp isearch ( C-M-s) funktioniert auch.
T. Verron

@ T.Verron danke! Eigentlich habe ich diese Funktion nicht ausgiebig genutzt, als ich sie das letzte Mal ausprobiert habe, hat die Regexp-Suche nicht funktioniert. Wer weiß, was ich damals versucht habe;-)
Giordano

@ T.Verron aus der Menüleiste-> ref-> globale Aktionen-> Version suchen und Version für ganzes Dokument ersetzen bietet eine bessere Regexp, da Sie Ihren Ausdruck im Minibuffer bearbeiten können, aber ich weiß nicht, welche Funktion dies ist und was die Tastenkombination.
Promotion am

3

Falls Sie sich nicht bewusst sind, können Sie Dired nur für einen bestimmten Satz von Dateien öffnen (in beliebigen Verzeichnissen, überall). IOW, Sie können Dired als Einstiegspunkt für alle Dateien eines Projekts verwenden. In diesem Zusammenhang funktionieren die üblichen Dired-Funktionen: Bearbeiten von markierten Dateien usw.

Wenn Sie Library Bookmark + verwenden , können Sie Dired-Lesezeichen verwenden, mit denen Sie verschiedene "Ansichten" verschiedener Dateigruppen, deren Markierungen usw. anzeigen können.

(Das Emacs-Wiki ist derzeit und für einige Tage wegen Wartungsarbeiten nicht verfügbar, sodass auf diesen Link vorübergehend nicht zugegriffen werden kann.)


Ist es wie Emacs Verengung C-x n n? Können Sie bitte Ihre Antwort mit weiteren Details bereichern? Vielen Dank.
Promotion am

Nein; nichts damit zu tun C-x n n- nur ein wenig bekanntes Dired-Feature. C-h f diredsagt Ihnen, dass Sie als Argument eine Liste von (z. B. absoluten) Datei- (und Verzeichnis-) Namen anstelle eines Verzeichnisnamens übergeben können. Das ist der Schlüssel. Library Dired + erleichtert die interaktive Verwendung. (Aber auch hier ist das Wiki vorübergehend nicht verfügbar, so dass im Moment auch kein Link verfügbar ist.)
Drew
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.