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 .tex
Dateien beschränkt wird. Das vermisse ich jetzt in Emacs sehr. Unten sehen Sie einen Screenshot von TXS:
TeXStudio-Abfrage in einem Multifile-LaTeX-Projekt
Ich möchte die Punkte im Workflow hervorheben, die in Emacs erreicht werden sollen:
- RegExp-Abfragesuche und -ersetzung nur in den projektbezogenen
.tex
Dateien. - Markieren Sie die Übereinstimmungen
- Eine Übersicht über die hervorgehobenen Ergebnisse in einem überschaubaren Layout (ähnlich der Protokollansicht von
Magit
in Emacs, wenn Sie drücken,l
gefolgt von einem anderenl
oder einfach wieC-x d
im Dired-Modus - 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
- 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, CW
dass jeder seinen besten Workflow teilen kann, um diesen gemeinsamen Job zu erledigen. Meine aktuellen Ansätze lauten wie folgt:
Erster Workflow
- Der Dired-Modus
% g
markiert 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. 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- 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. - Nachdem ich alle markierten Dateien erstellt habe, drücke ich
C-x s !
, um alle auf einen Schlag zu speichern. Puh!
Zweiter Workflow - bevorzugt
- Das Markieren aller
.tex
Dateien% m
im Dired-Modus durch Regexp, um nur.tex
Dateien zu markieren , damit ich im Grunde genommen ausgeführt\.tex
werde, 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
Q
innerhalb von Dired (Abfrage) ersetzt reguläre Ausdrücke nur in markierten Dateien. AlternativA
ist 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.
Wie approximiere ich die Regexp-Such- / Ersetzungsabfrage von TXS in mehreren Dateien?
Hinweis
- Emacs 24.4 unter Windows 7
quelle
Antworten:
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.
Hier ist eine Demo von
helm-projectile-grep
:Sie können in einem separaten Puffer speichern, um später mit
Save results in grep buffer
action` 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
:Search for:
Eingabeaufforderung ein, dh "Test".Search for "test" in file:
, das heißt*.tex
.rgrep
).Eine
rgrep
Demo:In Bezug auf Ihre Kriterien:
Sowohl Helm als auch
rgrep
unterstützen diese Funktion.Das gleiche wie oben.
Das gleiche wie oben.
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-resume
Befehl, mit dem Sie zum vorherigen Betrieb zurückkehren können, wenn Sie ihn versehentlich abbrechen.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
:Weitere Informationen finden Sie auf der Helm Github-Seite im Abschnitt "Erweiterte Verwendung" .
quelle
projectile
,helm
undhelm-projectile
liegt auf der Hand, was sonst? Außerdem gibt es hier zwei MELPA-Paketehelm-pojectile
undhelm projectile-all
Empfehlungen?Installation
Abschnitt in meinen Handbüchern zu Helm und Helmprojektil überprüfen .rgrep
besuchen Sie die Übereinstimmungsereignisse (vorwärts oder rückwärts) im oberen und unteren Puffer?Wenn ich verstanden habe, was Sie wollen, sollte RefTeX '
reftex-isearch-minor-mode
das sein, wonach Sie suchen . Aus seiner Beschreibung im Handbuch: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
quelle
M-r
des Suchpuffers zur Regexp-Suche, genau wie bei der regulären Sucheisearch
.C-M-s
) funktioniert auch.;-)
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.)
quelle
C-x n n
? Können Sie bitte Ihre Antwort mit weiteren Details bereichern? Vielen Dank.C-x n n
- nur ein wenig bekanntes Dired-Feature.C-h f dired
sagt 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.)