Ich möchte eine Reihe von Dateien definieren, in denen ich Text suchen und ersetzen kann.
Zu klären:
Ich möchte in der Lage sein, z. B. in allen Dateien xk * .tex in einem bestimmten Verzeichnis zu suchen (und Sicherungsdateien auszuschließen). Ich möchte auch in der Lage sein, den Ausdruck "Unsicherheit" in "Unbestimmtheit" in allen Dateien dd * .sh und ee * .cls zu ändern.
Was ist der Standardweg, um dies zu tun?
dired
, wie Sie eine Teilmenge von Dateien in einem bestimmten Verzeichnis suchen und ersetzen.ag
,wgrep
undmultiple-cursors
.Antworten:
Wenn Sie an einem genau definierten Projekt arbeiten, können Sie
occur
undgrep
Einrichtungen innerhalb dieses Projekts über verwendenprojectile
. Ausgehend von seiner Github-Beschreibung kann es unter den verschiedenen Funktionen, die von angeboten werdenprojectile
, Folgendes tun:quelle
Wenn sich alle Dateien im selben Verzeichnis befinden, können Sie die folgenden Schritte ausführen. Ich werde dies auf das zweite Beispiel in den Kommentaren stützen:
dired
um das entsprechende Verzeichnis imdired
Modus zu öffnen .dired-mark-files-regexp
in diesem Verzeichnis ausführen .^dd.*\.sh$
, was dem regulären Ausdruck entsprichtdd*.sh
. Diese Dateien werden jetzt mit einem gekennzeichnet*
und können je nach Farbschema auch in einer anderen Farbe hervorgehoben angezeigt werden.^ee.*\.cls$
), bis alle Dateien, die Sie bearbeiten möchten, markiert sind.dired-do-query-replace-regexp
auf den von Ihnen markierten Dateien ausgeführt zu werden.uncertainty
undindeterminacy
als Abfragezeichenfolgen ein. (Ich denke, dies unterscheidet zwischen Groß- und Kleinschreibung. Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen müssen, ist möglicherweise ein regulärer Ausdruck erforderlich, aber ich bin mir nicht sicher.)Und das ist die Idee. Wenn Sie dies einige Male in verschiedenen Ordnern wiederholen müssen, können Sie die Schritte 2 bis 6 als Makro aufzeichnen (drücken Sie C-x (nach Schritt 1 und C-x )nach Schritt 6). Und selbst wenn Sie mit elisp nicht sehr vertraut sind, können Sie dieses Makro mithilfe von elisp in elisp übersetzen
insert-kbd-macro
und versuchen, es in eine nützliche Funktion zu hacken.quelle
S-q
nicht bedeutetshift+q
, es bedeutetsuper+q
. Sie sollten nur schreiben,Q
wenn Sie meinenshift+q
. Ich habe Ihren Kommentar bearbeitet, um dies widerzuspiegeln.S-q
heißtshift+q
;super+q
würde geschrieben werdens-q
.Sie können
M-x find-name-dired
einen dired-Puffer abrufen, der Links zu allen Dateien enthält, die einem bestimmten Namensmuster entsprechen.Verwenden Sie
M-x find-grep-dired
diese Option, um einen dired-Puffer abzurufen, der die Dateien enthält, deren Inhalt mit dem angegebenen grep-Muster übereinstimmt.Es gibt viel mehr solcher Befehle; Was am besten geeignet ist, hängt von Ihren Anforderungen ab. Bitte aktualisieren Sie Ihre Frage.
Anschließend können Sie die Liste der Dateien mithilfe von Makros durchlaufen. Schauen Sie sich Brians Antwort als Beispiel an: https://emacs.stackexchange.com/a/9497/2005
quelle
Verwenden Sie rgrep und wgrep.
Mit rgrep können Sie alle nach einem regulären Ausdruck in Dateien suchen, deren Dateiname mit einem regulären Ausdruck übereinstimmt, und in einem Verzeichnis (und seinen Unterverzeichnissen).
Mit wgrep können Sie den Puffer bearbeiten, der die Ergebnisse Ihrer rgrep-Suche enthält.
quelle