it-swarm.com.de

Wie kann ich C++ - Quellcode mit Emacs umgestalten?

Ich interessiere mich hauptsächlich für C++ und automatische Änderungen von Methode/Klassenname/Signatur.

43
Łukasz Lew

Ich mache das oft, deshalb erwarte ich auch andere Antworten.

Die einzigen Tricks, die ich kenne, sind wirklich einfach. Hier sind meine besten Freunde in Emacs beim Refactoring von Code:

M-x query-replace

Dadurch können Sie eine globale Suche durchführen und ersetzen. Sie werden dies eine Menge tun, wenn Sie Methoden und Daten, auf die häufig zugegriffen wird, in andere Klassen oder Namespaces verschieben.

C-x 3

Dadurch erhalten Sie eine Anzeige mit zwei Puffern nebeneinander. Sie können dann mit dem Laden verschiedener Dateien fortfahren und den Cursor mit C-x o von einer zur anderen bewegen. Das ist ziemlich einfach, aber ich erwähne es, weil es die nächste macht ...

C-x (
(type any amount of stuff and/or emacs commands here)
C-x )

So definieren Sie ein Makro in Emacs. Jedes Mal, wenn Sie dasselbe immer und immer wieder mit einer Menge Code tun müssen (und es zu komplex für das Ersetzen von Abfragen ist), ist dies ein Lebensretter. Wenn Sie sich vermasseln, können Sie C-g drücken, um die Makrodefinition anzuhalten, und dann rückgängig machen (C-_), bis Sie wieder an dem Ausgangspunkt sind, an dem Sie begonnen haben. Die Schlüssel zum Aufrufen des Makros lauten C-x e. Wenn Sie es mehrere Male machen möchten, können Sie Esc drücken und zuerst eine Zahl eingeben. Beispiel: Esc 100 C-x e versucht, Ihr Makro 100 Mal aufzurufen.

(Hinweis: Unter Windows können Sie "Meta" erhalten, indem Sie die Esc-Taste drücken oder die Alt-Taste gedrückt halten).

14
T.E.D.

В последних версиях Emacs (24) Semantic способен на это.

  1. Возможно активировать семантический режимM-x semantic-mode RET,.
  2. Weitere Informationen über Symref finden Sie unterC-c , g,.
  3. НажмитеC-c C-eоткрыть все ссылки.
  4. Переименовать сR,.
29
muede

Wenn Sie in elisp programmieren können, können Sie eine Kombination aus cedet + srecode aus CEDET-Bibliotheken suchen - es stellt alle Instrumente für diese Aufgabe bereit - Aufruf von Funktionen finden, Signatur erhalten usw. Sie müssen jedoch selbst ein Refactory-Tool erstellen mit diesen Instrumenten 

25
Alex Ott

Irgendwo zwischen Refactoring-Werkzeugen und einfachem Regex können Sie seit Emacs 22 beliebige Elisp-Ausdrücke in Ihren Ersetzungstext einbetten, wodurch Sie eine unglaublich mächtige Textmanipulation durchführen können. Steve Yegge hat vor einiger Zeit einen guten Artikel darüber geschrieben.

8
jamesnvc

Mit den Optionen ccls oder cquery , die das "Sprachserverprotokoll" (lsp) bereitstellen, können Sie Namen umgestalten mit:

M-x lsp-rename

Alternative: srefactor verwendet das Emacs-Framework für den semantischen Modus: https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org

Sie können es mit bekommen M-x package-install von MELPA oder unter https://github.com/tuhdo/semantic-refactor/ .

7
TheJJ

Ein Freund von mir spielte mit xrefactory und sagte, dass es ziemlich gut funktioniert hat. Es ist zwar nicht billig.

6
Greg Rogers

Erstellen Sie Cscope-Symbole.

suchen Sie das Symbol, das Sie umgestalten möchten.

gehen Sie in das cscope-Fenster und starten Sie ein Makro, nachdem Sie den Cursor auf das erste Vorkommen gesetzt haben

  • ret
  • c-f dein symbol start
  • navigiere zum Anfang deines Symbols
  • Ändern Sie das Wort
  • c-x o (zurück zu cscope)
  • n (for next cscope symbol)

sie müssen jetzt nur c-x c-e

4
Vijayender

Ich stimme völlig zu, dass das Suchen und Ersetzen gut funktioniert. Ein wirklich schönes Feature des Cedets ist jedoch die Semantic-Symref-Liste. 

Führen Sie diesen Befehl mit dem Cursor auf einer Methode aus, und es wird ein Puffer angezeigt, in dem alle Stellen in Ihrem Code aufgeführt sind, die auf dieses Tag verweisen.

Sie können weiterhin Suchen und Ersetzen-Tricks verwenden. Dadurch wird bestätigt, dass Sie alle Referenzen geändert haben.

2
user7957

Ich habe cquery für meine C++ - Vervollständigung verwendet, die Microsoft LSP für IDE <-> Tool-Kommunikation verwendet. cquery Server erfüllt die Anforderungen des LSP-Protokolls mit einem Clang-Backend.

lsp-emacs ist das Paket, das zwischen emacs und dem cquery-Backend (cquery-emacs) sitzt und eine lsp-rename-Funktion verfügbar macht. Als Abschlusssystem war cquery übrigens sehr zuverlässig und schnell, sehr zu empfehlen.

Probieren Sie es aus, folgen Sie den Anleitungen für den Einstieg in cquery github: https://github.com/cquery-project/cquery/wiki/Emacs

Sobald Sie cquery eingerichtet haben:

  1. Bewegen Sie den Mauszeiger über einen Bezeichner (Klasse, Var oder was auch immer), den Sie umbenennen möchten.
  2. M-x lsp-rename
  3. Geben Sie den Namen new für den Bezeichner ein.
  4. Do C-x s (save some puffer), die Sie auffordert, Alle Puffer zu speichern, die vom Refaktor berührt wurden.

Sie sollten wahrscheinlich alle modifizierten Puffer durchgehen und mit einem beliebigen Werkzeug/einer anderen Sprache überprüfen, was nach dem Refactoring getan wurde.

0
nenchev