Derzeit umfasst mein Workflow mit Emacs beim Codieren in C oder C ++ drei Fenster. Die größte rechts enthält die Datei, mit der ich arbeite. Die linke Seite ist zweigeteilt, wobei die untere eine Shell ist, die ich zum Eingeben von Kompilierungs- oder Erstellungsbefehlen verwende, und die obere ist häufig eine Art Dokumentation oder README-Datei, die ich während der Arbeit einsehen möchte. Jetzt weiß ich, dass es einige ziemlich erfahrene Emacs-Benutzer gibt, und ich bin gespannt, welche anderen Emacs funktionell nützlich sind, wenn die Absicht besteht, sie als vollständige IDE zu verwenden. Insbesondere erfüllen die meisten IDEs diese Funktionen normalerweise in der einen oder anderen Form:
- Quellcode-Editor
- Compiler
- Debuggen
- Dokumentationssuche
- Versionskontrolle
- OO-Funktionen wie Klassensuche und Objektinspektor
Für einige davon ist es ziemlich offensichtlich, wie Emacs diese Funktionen erfüllen kann, aber was ist mit dem Rest? Wenn sich eine bestimmte Sprache darauf konzentrieren muss, würde ich sagen, dass es C ++ sein sollte.
Bearbeiten: Ein Benutzer wies darauf hin, dass ich genauer hätte sein sollen, als ich sagte, was ist mit dem Rest? Meistens war ich neugierig auf eine effiziente Versionskontrolle sowie auf die Suche nach Dokumentationen. In SLIME ist es beispielsweise ziemlich einfach, eine schnelle Hyperspec-Suche für eine Lisp-Funktion durchzuführen. Gibt es eine schnelle Möglichkeit, etwas in der C ++ STL-Dokumentation nachzuschlagen (wenn ich beispielsweise die genaue Syntax von hash_map vergessen habe )?
quelle
Antworten:
Sie müssen genau wissen, was Sie unter "dem Rest" verstehen. Mit Ausnahme des Objektinspektors (der mir bekannt ist) erledigt emacs alle oben genannten Aufgaben ganz einfach:
M-x compile
und den Kompilierungsbefehl eingeben. Von da an können Sie einfachM-x compile
und standardmäßig verwenden. Emacs erfasst C / C ++ - Compilerfehler (funktioniert am besten mit GCC) und hilft Ihnen beim Navigieren zu Zeilen mit Warnungen oder Fehlern.M-x gdb
und es wird ein GDB-Puffer mit speziellen Bindungen erstelltBearbeiten: Mir ist klar, dass meine Antwort zur Dokumentationssuche wirklich mit der Code-Navigation zusammenhängt. Hier sind einige weitere Informationen auf den Punkt:
Die Google-Suche wird zweifellos weitere Beispiele zeigen.
Wie der zweite Link zeigt, können Funktionen (und was auch immer) in anderen Dokumentationen nachgeschlagen werden, auch wenn sie nicht sofort unterstützt werden.
quelle
Ich muss Emacs Code Browser empfehlen als "traditionellere" IDE-Umgebung für Emacs .
EDIT : Ich empfehle Magit jetzt auch sehr über die Standard-VCS-Schnittstelle in Emacs.
quelle
Haben Sie versucht, Mx zu kompilieren, anstatt einen Befehl make im Shell-Fenster auszuführen? Es führt Ihren Befehl make aus, zeigt Fehler an und macht es in vielen Fällen sehr einfach, zu der Codezeile zu springen, die den Fehler verursacht hat, wenn die Ausgabe Dateinamen und Zeilennummern enthält.
Wenn Sie ein Fan von IDEs sind, sollten Sie sich auch das Speedbar-Paket von Emacs (Mx Speedbar) ansehen. Wenn Sie dies noch nicht getan haben, erfahren Sie, wie Sie mithilfe von Tag-Tabellen in Ihrem Code navigieren.
quelle
Es gibt Ecken von Emacs, die Sie auf eine Weise produktiver machen, an die Sie nie gedacht haben. Wie andere bereits erwähnt haben, ist die Verwendung von Tags eine fantastische und schnelle Möglichkeit, um Ihren Quellcode zu vergrößern, und die Verwendung von M- / (dabbrev-expand) führt häufig genau das aus, was Sie beim Vervollständigen eines Variablennamens erwarten.
Die Verwendung von "ereignet" ist nützlich, um einen Puffer mit allen Vorkommen eines regulären Ausdrucks in einem Puffer abzurufen. Dies ist sehr praktisch, wenn Sie Code umgestalten und nach Codefragmenten oder Verwendungen von Variablen suchen oder wenn Sie TODO-Marker in Ihren Quelldateien verwenden und alle besuchen möchten.
Flush-Lines, Sort-Numeric-Felder, Replace-Regexp und Rechteck-Funktionen können sehr nützlich sein, um einen Speicherauszug von einem Tool zu nehmen und ihn in nützliche Daten wie ein Elisp-Programm oder eine durch Kommas getrennte Tabelle zu konvertieren.
Ich habe eine Seite über IDE geschrieben, wie man sie mit Emacs machen kann
http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html
Das Erlernen von Elisp ist eine weitere großartige Möglichkeit, um selbst zu beantworten, was Emacs über das hinaus tun können, was eine typische IDE leisten kann.
Zum Beispiel habe ich über das Schreiben von Perforce-Hilfsfunktionen wie "Schuld" gebloggt (wenn Sie Ihre eigenen schreiben, können Sie dafür sorgen, dass es sich genau so verhält, wie Sie es möchten) ...
http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html
Ich habe auch Code geschrieben, der dynamisch Kommentare für eine Funktion erstellt, die den Codierungsstandards entspricht, mit denen ich arbeite.
Keiner meiner Elisp-Codes ist besonders gut und der größte Teil existiert bereits in Bibliotheken, aber es ist wirklich nützlich, Emacs dazu zu bringen, benutzerdefinierte Dinge zu tun, die gerade während eines Arbeitstages auftauchen.
quelle
Eine detaillierte Beschreibung der Integration von Emacs und Versionskontrolle finden Sie auf meiner Website . Ich arbeite auch an einem Artikel über die Verwendung von Emacs als Entwicklungsumgebung für viele Sprachen - C / C ++, Java, Perl, Lisp / Scheme, Erlang usw.
quelle
Für die Versionskontrolle gibt es verschiedene Möglichkeiten, je nachdem, welches Versionskontrollsystem Sie verwenden. Einige der Funktionen sind jedoch allen gemeinsam.
vc.el ist die integrierte Methode zur Verwaltung der Versionskontrolle auf Dateiebene. Es hat Backends für die meisten Versionskontrollsysteme. Zum Beispiel wird das Subversion-Backend mit Emacs geliefert, und es gibt Git-Backends und andere, die aus anderen Quellen verfügbar sind.
Der nützlichste Befehl ist Cx vv (vc-next-action), der die entsprechende nächste Aktion für die Datei ausführt, die Sie besuchen. Dies kann bedeuten, dass Sie eine Aktualisierung aus dem Repository durchführen oder Ihre Änderungen festschreiben. Vc.el bindet außerdem Cx Cq neu , um Dateien , wenn Sie ein System verwenden, das dies benötigt (wie RCS).
Andere sehr nützliche Befehle sind Cx vl und Cx v = , die Ihnen das Protokoll und den aktuellen Unterschied für die von Ihnen verwendete Datei anzeigen.
Für eine echte Produktivität sollten Sie jedoch die Verwendung der Einzeldatei-Befehle vc.el nicht für einfache Zwecke verwenden. Es gibt verschiedene Pakete, mit denen Sie einen Überblick über den Status Ihres gesamten Baums erhalten und mehr Leistung erhalten. Außerdem können Sie kohärente Commits erstellen, die sich über mehrere Dateien erstrecken.
Die meisten davon sind stark beeinflusst oder basieren auf den ursprünglichen pcl-cvs / pcvs für CVS. Es gibt sogar zwei von ihnen , die mit Subversion, kommt psvn.el und dsvn.el . Es gibt Pakete für Git etc.
quelle
Okay, jeder hier gibt perfekte Tipps, um Emacs zu einer großartigen IDE zu machen.
Aber jeder sollte bedenken, dass Ihre Emacs für einen Editor sehr, sehr langsam geladen werden, wenn Sie Ihre Emacs mit vielen Erweiterungen anpassen (insbesondere mit solchen für die schnelle Typprüfung, Funktionsdefinitionssuche usw.).
Um dies zu umgehen, würde ich die Verwendung von Emacs in sehr empfehlen
server mode
.Es ist ziemlich einfach zu bedienen, Sie müssen Ihre Init-Datei nicht anpassen. Sie müssen Emacs nur im Daemon-Modus starten.
Dadurch wird ein Emacs-Server erstellt, den Sie entweder über das Terminal oder über die GUI verbinden können. Ich würde auch empfehlen, einige Aliase zu erstellen, um das Aufrufen zu vereinfachen.
Auf diese Weise werden Emacs noch schneller ausgelöst als Gedit, versprochen.
Das einzig mögliche Problem hierbei: Wenn Sie den Emacs-Daemon von Ihrem Gelegenheitsbenutzer ausführen, können Sie den Emacs-Server wahrscheinlich nicht als verbinden
root
.Wenn Sie also eine Datei mit Root-Zugriff öffnen müssen, Verwenden Sie
tramp
stattdessen. Führen Sie einfach Ihren Emacs-Client mit Ihrem normalen Benutzer aus und öffnen Sie Dateien wie diese.Dies hat mir das Leben leichter gemacht. Auf diese Weise kann ich meine umfangreiche angepasste Python-IDE in Millisekunden öffnen. Möglicherweise möchten Sie Ihrem Systemstart auch emacs --daemon hinzufügen oder eine Desktop-Datei für emacsclient erstellen. Das liegt an dir.
Weitere Informationen zu Emacs Daemon und Emacs Client finden Sie im Wiki.
http://www.emacswiki.org/emacs/EmacsAsDaemon
http://www.emacswiki.org/emacs/EmacsClient
quelle
EDITOR="emacsclient -t" VISUAL="emacsclient -c"
, können Sie sudo-basierte Bearbeitung mitsudo -e
oder durchführensudoedit
, was manchmal der Verwendung von TRAMP vorzuziehen ist (normalerweise aus Prüfungsgründen). Sie können emacsclient auch mit aufrufen--alternate-editor=
( benötigt den Speicherplatz am Ende) und der Daemon wird gestartet, wenn er nicht ausgeführt wird. Dadurch entfällt die Notwendigkeit, den Daemon beim Systemstart zu aktivieren, wenn Sie bereit sind, beim ersten Mal darauf zu warten Führen Sie den Editor bei jedem Start aus.Ich bin damit einverstanden, dass Sie etwas über das Kompilieren von Mx lernen sollten (binden Sie das und den nächsten Mx-Fehler an eine kurze Tastenfolge).
Erfahren Sie mehr über die Bindungen für die Versionskontrolle (z. B. vc-diff, vc-next-action usw.)
In Register schauen. Sie können sich nicht nur Speicherorte in Puffern merken, sondern auch ganze Fensterkonfigurationen (Cx rw - Fensterkonfiguration zum Registrieren).
quelle
Ein Ausgangspunkt (der möglicherweise nicht offensichtlich ist) für die Erkundung der VC-Funktionen von Emacs ist Mx vc-next-action .
Abhängig vom Status der Datei und dem VC-Backend wird die "nächste logische Versionskontrolloperation" für die aktuelle Datei ausgeführt. Wenn die Datei nicht der Versionskontrolle unterliegt, wird sie registriert. Wenn die Datei geändert wurde, werden die Änderungen übermittelt usw.
Es ist etwas gewöhnungsbedürftig, aber ich finde es sehr nützlich.
Die Standard-Tastenkombination ist Cx vv
quelle
Es gibt eine TFS.el für die Emacs-Integration in Microsoft TFS . Es funktioniert mit jedem TFS, einschließlich des TFS, auf dem Codeplex.com ausgeführt wird.
Grundlegende Schritte zum Einrichten:
Platziere tfs.el in deinem Ladepfad.
In Ihrer .emacs-Datei:
Legen Sie auch in Ihrer .emacs-Datei lokale oder globale Tastenkombinationen für tfs-Befehle fest. wie so:
quelle
Kompilieren, nächster Fehler und vorheriger Fehler sind alles ziemlich wichtige Befehle für die C ++ - Entwicklung in Emacs (funktioniert auch hervorragend bei der Grep-Ausgabe). Etags, Visit-Tags-Table und Find-Tag sind ebenfalls wichtig. Completion.el ist einer der großen unbesungenen Hacks des 20. Jahrhunderts und kann Ihr C ++ - Hacking um eine Größenordnung beschleunigen. Oh und vergessen wir nicht Ediff.
Ich habe noch nicht gelernt, wie man die Versionskontrolle verwendet, ohne eine Shell zu besuchen, aber jetzt, wo ich Commits so viel häufiger ausführe (mit Git), muss ich das wahrscheinlich tun.
quelle
Möglicherweise finden Sie auch eine Registerkarte nützlich. Es emuliert das einzige Verhalten, das ich beim Wechsel von Eclipse zu Emacs übersehen habe. Gebunden an "," und "." Wenn Sie zur vorherigen und nächsten Registerkartenleiste wechseln, müssen Sie den Puffer nicht ständig mit Strg-x b wechseln.
Leider bietet die erwähnte Webseite nicht die richtige Version zum Herunterladen. Die meisten Ubuntu-Versionen liefern es jedoch in ihren Emacs-Goodies-Paketen.
quelle
Ich benutze Emacs unter Windows. Das Kompilierungsmodul ist nett, aber ich wollte, dass die Kompilierung in Bezug auf die vorgeschlagene Kompilierungsbefehlszeile intelligenter ist. Es ist möglich, "Dateivariablen" zu verwenden, um anzugeben
compile-command
, aber ich wollte etwas, das etwas schlauer ist. Also habe ich eine kleine Funktion geschrieben, um zu helfen. Es wird der Kompilierungsbefehl erraten, der beim Ausführen verwendet werden soll, um den Benutzer dazu aufzuforderncompile
.Die Guess-Funktion sucht nach einer vbproj- oder csproj- oder sln-Datei und schlägt msbuild vor, wenn sie gefunden wird. Dann sieht es sich den Namen der Pufferdatei an und schlägt abhängig davon verschiedene Dinge vor. Eine .wxs-Datei bedeutet, dass es sich um ein WIX-Projekt handelt und Sie wahrscheinlich eine MSI erstellen möchten. Die Schätzlogik schlägt daher einen nmake-Befehl für die MSI vor. Wenn es sich um ein Javascript-Modul handelt, wird empfohlen, jslint-for-wsh.js auszuführen, um die .js-Datei zu fusseln. Als Fallback schlägt es nmake vor.
Der Code, den ich verwende, sieht folgendermaßen aus:
Ich habe versucht, dies als "vor dem Rat" für die Kompilierungsfunktion zu tun, konnte es jedoch nicht zufriedenstellend zum Laufen bringen. Also habe ich eine neue Funktion definiert und sie an dieselbe Tastenkombination gebunden, für die ich sie verwendet habe
compile
.quelle
Bei der Dokumentationssuche: Dies hängt von Ihren Programmiersprachen ab.
C-Bibliotheken und Systemaufrufe werden normalerweise in Manpages dokumentiert. Dafür können Sie verwenden
M-x man
. Einige Dinge können auf Infoseiten besser dokumentiert werden. verwendenM-x info
.Verwenden Sie für elisp selbst
C-h f
. Verwenden Sie für Python>>> help(<function, class, module>)
den Interpreter.Ich finde, dass die meisten anderen Sprachen Dokumentation in HTML-Form anbieten. Versuchen Sie dazu einen eingebetteten Browser (ich benutze w3m). Stellen Sie Ihre
BROWSER
Umgebungsvariable auf ein Wrapper-Skript umemacsclient -e "(w3m-goto-url-new-session \"$@\")"
(on * nix) ein, falls etwas einen Browser öffnen sollte und Sie möchten, dass es in Emacs geöffnet wird.quelle
Ich weiß, dass dies ein sehr alter Beitrag ist. Diese Frage gilt jedoch für Emacs-Anfänger.
IMO Der beste Weg, Emacs als Idee zu verwenden, ist die Verwendung eines Sprachserverprotokolls mit Emacs. Alle Informationen zu Sprachservern finden Sie auf der verlinkten Website.
Für eine schnelle Einrichtung möchte ich Sie dringend bitten, auf diese Seite eglot zu gehen . IMO eglot macht seinen Job ziemlich gut. Es lässt sich gut in Auto-Completion-Pakete wie Company integrieren. Bietet Referenz und mehr.
Auch für einen Debugger benötigen Sie möglicherweise bestimmte Debugger für bestimmte Sprachen. Sie können gdb aus emacs heraus verwenden. Geben Sie einfach ein
M-x gdb
.Verwenden Sie zum Kompilieren Ihres Codes am besten Shell-Befehle. Ich arbeite an diesem Projekt eproj . Es wird eine Weile dauern, bis es fertig ist. Es wird jedoch nur der Shell-Befehl dem Projekttyp zugeordnet. Und erstellt Ihr Projekt über Shell. Das Gleiche gilt für die Ausführung des Befehls. Möglicherweise benötige ich Hilfe beim Abschluss dieses Projekts. Es ist noch nicht einsatzbereit, aber wenn Sie ein bisschen Elisp kennen, können Sie den Code durchgehen.
Abgesehen davon ist es immer am besten, den Befehl emacs compile zu verwenden.
Für die Versionskontrolle habe ich noch kein anderes Paket gesehen, das mit der Kraft von Magit mithalten kann . Es ist spezifisch für Git. Auch für Git gibt es ein weiteres Paket Git-Timemachine, das ich sehr nützlich finde.
Die Objektsuche und Klassensuche erfolgt über das Sprachserverprotokoll.
Ein Projektbaum kann für eine ideenähnliche Schnittstelle mit Treemacs verwendet werden .
Es gibt auch eine Projekt-Interaktionsbibliothek namens Projektil .
Für die automatische Vervollständigung finde ich den Firmenmodus sehr nützlich.
Wirklich Emacs können dazu gebracht werden, alles zu tun.
quelle
In den letzten Jahren wurde Clang ein wichtiger Bestandteil der Emacs C ++ - Unterstützung. Atila Neves hatte einen Vortrag auf der CppCon 2015: "Emacs als C ++ IDE"
Es ist ein 16-minütiger Vortrag, in dem er Lösungen für folgende Themen zeigt:
Folien finden Sie hier .
quelle
Im Unix- oder X-Windows-Stil weiß ich nicht, dass es eine integrierte IDE gibt, die für alles funktioniert.
Berücksichtigen Sie bei der Interaktion mit Debuggern, die nur eine Komponente einer IDE sind, Realgud . Das andere, was ich nützlich finde, sind Parser für Standortnachrichten. Wenn Sie also einen Call-Stack-Trace haben und an einer bestimmten Stelle im Callstack bearbeiten möchten, kann diese Front-End-Schnittstelle dies tun.
Dieses Programm könnte bei weitem verbessert werden. Dann könnten aber auch Leute daran arbeiten, um es zu verbessern.
Haftungsausschluss: Ich arbeite an Realgud
quelle
Versuchen Sie es mit dem LSP-Modus. Jetzt können Sie andere IDE-Funktionen in Emacs verwenden, die eine Verbindung zum Server herstellen. Suchen Sie nach weiteren Informationen: lsp-Modus
quelle