UPDATE : Ich habe ein Semantic Refactor- Paket erstellt, das dieses Problem und mehr vollständig löst. Sie können sich die Demos ansehen, um zu sehen, wie es funktioniert. Der verbleibende Text dieser Antwort nach diesem Satz ist alt und wird nur aus historischen Gründen dort abgelegt.
ALTE ANTWORT :
Sie können die senator-copy-tag
Funktionssignatur genau kopieren und dann wieder in Ihre Quelldatei einfügen. senator-copy-tag
und Senator-Befehle sind verfügbar, wenn Sie Folgendes aktivieren semantic-mode
:
(semantic-mode 1)
Semantic ist ein in Emacs integriertes Paket.
Sie können Semantic Senator mit Projectile in einem Befehl kombinieren, um Funktionsprototypen von überall in Ihrem Projekt in eine andere Datei (Datei mit demselben Namen, aber unterschiedlicher Erweiterung) einzufügen. Wenn nur eine andere Datei vorhanden ist, wird der Befehl sofort in diese Datei eingefügt. Wenn mehr als eine Datei vorhanden ist, werden Sie aufgefordert, eine Datei auszuwählen. Wenn keine vorhanden sind, werden Sie aufgefordert, die gesamten Dateien in Ihrem Projekt einzugeben. Nachdem Sie eine Datei ausgewählt haben, bietet eine Eingabeaufforderung eine Liste der semantischen Tags im aktuellen Puffer an, die Sie nach dem Einfügen auswählen können.
Ich habe eine PR bei Emacs Refactor eingereicht . Vollständiger Code, wenn Sie es versuchen möchten, ohne auf die PR zu warten: Klicken Sie hier .
Hier ist eine Demo (sie beginnt, wenn Sie START DEMO
unten sehen):
Sie können auch nur Senator verwenden, um Prototypen zu kopieren und zu funktionieren. Solange sich der Punkt irgendwo innerhalb der Funktionssignatur oder des Funktionskörpers senator-copy-tag
befindet C-c , M-w
, kopiert run , an den standardmäßig gebunden ist , die gesamte Funktion: sowohl die Signatur als auch den Textkörper. Sie können jedoch nur die Signatur einfügen, wenn Sie möchten, indem Sie den Befehl senator-yank-tag
ausführen, C-c , C-y
an den standardmäßig gebunden ist . Durch Drücken von C-y
wird die gesamte Funktionssignatur zusammen mit ihrem Körper eingefügt. senator-copy-tag
funktioniert sogar mit Funktionssignatur, die in mehreren Zeilen wie folgt erweitert wurde:
void
func(int a,
int b,
int c)
{
.....
}
Obwohl dieser Ansatz nicht direkt in einen gleichnamigen Puffer eingefügt wird, ist er in anderen Fällen besser anwendbar. Ihr Anwendungsfall funktioniert nur, wenn Sie zwei Dateien im selben Verzeichnis und mit demselben Namen, aber unterschiedlichen Erweiterungen haben. Was ist, wenn die Funktionsdeklaration und die Funktionsdefinition in verschiedenen Dateien mit unterschiedlichen Namen verbleiben müssen?
EDIT2 : Hier ist ein Beispiel für das intelligente Einfügen eines Funktionsprototyps mithilfe semantischer Tags. Derzeit können Sie nur basierend auf den relativen Positionen ("vor" und "nach") von semantischen Tags der obersten Ebene einfügen. Ich werde aktualisieren, damit der Benutzer an jeder Stelle, an der semantische Tags verfügbar sind, mehr Positionen einfügen kann (dh wenn ein Tag ein ist Class
, sollte es zusätzliche Positionen bieten : public
, projected
und private
). Die Demo beginnt, wenn Sie START DEMO
unten sehen:
Bonus : Wenn Sie .cpp
aus einer Header-Datei eine Liste leerer Funktionsdefinitionen in einer Datei erstellen möchten , verwenden Sie member-functions.el . Aber bald werde ich es durch Semantic + Projectile ersetzen.