Frage

Zur Zeit meines Workflow mit Emacs, wenn ich in C oder C ++ bin Codierung besteht aus drei Fenstern. Die größte auf der rechten Seite befindet sich die Datei mit denen ich arbeite. Die linke ist in zwei, der Boden ist eine Schale, die ich Kompilierung eingeben oder Befehle machen, und die Spitze ist oft eine Art von Dokumentation oder Readme-Datei, die ich mag konsultieren, während ich arbeite. Jetzt weiß ich, es gibt einige ziemlich Experten Emacs Benutzer gibt, und ich bin gespannt, was andere Emacs funktionell nützlich ist, wenn die Absicht, es als eine komplette IDE zu verwenden ist. Insbesondere die meisten IDEs in der Regel diese Funktionen erfüllen, ist eine Form oder eine andere:

  • Quellcode-Editor
  • Compiler
  • Debuggen
  • Dokumentation Lookup
  • Versionskontrolle
  • OO Features wie Klasse-Lookup und Objektinspektor

Für ein paar von diesen, ist es ziemlich offensichtlich, wie Emacs diese Funktionen passen kann, aber was ist mit dem Rest? Auch wenn eine bestimmte Sprache auf fokussiere muss, würde ich sagen, es sollte C ++ sein.

Edit: Ein Benutzer darauf hingewiesen, dass ich spezifischere sein sollte, wenn ich sagte, ‚was ist mit dem Rest‘. Ich war vor allem neugierig auf effiziente Versionskontrolle sowie Dokumentation Lookup. Zum Beispiel in SLIME ist es ziemlich einfach, ein schnellen hyperspec-Lookup auf einer Lisp-Funktion zu tun. Gibt es einen schnellen Weg, um etwas in C ++ STL-Dokumentation nachschlagen (wenn ich die genaue Syntax von vergessen hash_map , zum Beispiel)?

War es hilfreich?

Lösung

Sie werden spezifisch sein müssen, was Sie unter „den Rest“. Mit Ausnahme des Objektinspektor (das I "m bewusst), Emacs macht die ganze oben ganz leicht:

  • Editor (offensichtliche)
  • Compiler - nur M-x compile laufen und Ihre Kompilierungsbefehl eingeben. Von dort aus können Sie einfach M-x compile und verwenden Sie die Standardeinstellung. Emacs erfassen C / C ++ Compiler-Fehler (funktioniert am besten mit GCC) und helfen Sie Linien mit Warnungen oder Fehler zu navigieren.
  • Debugging - ähnlich, wenn Sie möchten, zu debuggen, gibt M-x gdb und es wird einen GDB-Puffer mit speziellen Bindungen
  • erstellen
  • Dokumentation Lookup - Emacs hat eine ausgezeichnete CScope Bindungen für Code-Navigation. Für andere Dokumentation: Emacs hat auch eine Manpage Leser, und für alles andere gibt es die Web-und Bücher
  • .
  • Versionskontrolle - es gibt viele Emacs-Anbindungen für verschiedene VCS-Backends (CVS, SCCS, RCS, SVN, GIT alle in den Sinn kommen)

Edit: Ich meine Antwort zur Dokumentation Lookup realisieren wirklich Code-Navigation betraf. Hier einige weitere to-the-Punkt-Info:

Google Suche wird ohne Zweifel weitere Beispiele zeigen.

Wie der zweiten Link zeigt, Funktionen suchen (und was auch immer) in anderen Unterlagen kann getan werden, auch wenn sie nicht aus der Box unterstützt.

Andere Tipps

Ich muss Emacs Code Browser als "traditionelleren" empfehlen IDE Stylumgebung für emacs.

Bearbeiten : auch empfehle ich jetzt Magit hoch über dem Standard VCS-Schnittstelle in emacs.

Statt einen Befehl make im Shell-Fenster laufen, haben Sie versucht, M-x kompilieren? Es wird Ihren Befehl make, angezeigt wird fehlerfrei laufen, und in vielen Fällen macht es sehr einfach, an die Codezeile zu springen, die den Fehler verursacht hat, wenn die Ausgabe-Dateinamen und Zeilennummern enthält.

Wenn Sie ein Fan von IDEs sind, könnten Sie auch bei Emacs aussehen wollen speedbar Paket (M-x speedbar). Und wenn Sie nicht bereits haben, zu erfahren, wie Tags Tabellen zu verwenden, um Ihren Code zu navigieren.

Es Ecken von Emacs sind, die einst entdeckt machen Sie produktiver in Möglichkeiten, die Sie nie gedacht. Wie andere erwähnt haben, Tags verwendet, ist eine fantastische und schnelle Art und Weise um den Quellcode zu vergrößern und mit M- / (dabbrev-expand) oft genau das tut, was Sie erwarten, wenn Sie einen Variablennamen vervollständigt.

auftreten ist hilfreich, einen Puffer mit allen Vorkommen eines regulären Ausdrucks in einem Puffer zu erhalten. Das ist wirklich praktisch, wenn Code Refactoring und auf der Suche nach Fragmenten von Code oder verwendet von Variablen, oder wenn Sie ERLEDIGEN Marker in Ihren Quelldateien verwenden, und Sie wollen, dass sie alle besuchen.

flush-Linien, Art-numeric-Felder, replace-regexp und Rechteck-Funktionen können wirklich nützlich sein, von einem Werkzeug einen Dump für die Aufnahme und sie zu nützlichen Daten wie zum Beispiel eines elisp-Programm oder ein Komma getrennte Tabelle konvertieren.

Ich schrieb eine Seite über IDE wie Dinge, die Sie mit Emacs tun können,

http: //justinsboringpage.blogspot. com / 2007/09/11-visual-studio-Tricks-in-emacs.html

elisp Lernen ist eine weitere gute Möglichkeit, für dich selbst, was sonst Emacs zu beantworten tun kann über das, was ein typisches IDE tun kann.

Zum Beispiel habe ich über das Schreiben von Perforce Helferfunktionen wie Schuld gebloggt haben (Schreiben Sie Ihre eigene heißt, Sie können es genau machen verhalten, wie Sie wollen) ...

http: // justinsboringpage. blogspot.com/2009/01/who-changed-line-your-working-on-last.html

Ich habe auch Code geschrieben, die dynamisch Kommentare für eine Funktion an der Stelle erzeugt, die die Coding-Standards übereinstimmt mit ich arbeite.

Keiner meiner elisp Code ist besonders groß, und das meiste davon ist bereits in Bibliotheken, aber es ist wirklich nützlich zu können Emacs benutzerdefinierte Sachen machen zu tun, die nur während eines Arbeitstages kommt.

Sie können detaillierte Beschreibung der Emacs & Versionskontrolle Integration auf meine Seite . Ich arbeite auch auf Artikel über Emacs als Entwicklungsumgebung für viele Sprachen - C / C ++, Java, Perl, Lisp / Scheme, Erlang, etc ...

Für die Versionskontrolle, gibt es einige Dinge, die Sie verwenden können, je nachdem, welche Versionskontrollsystem Sie verwenden. Aber ein Teil der Funktionalität ist für alle von ihnen gemeinsam.

vc.el ist die integrierte Möglichkeit, die Versionskontrolle auf Dateiebene zu behandeln. Es hat Backends für die meisten Versionskontrollsysteme. Zum Beispiel kommt der Subversion-Backend mit Emacs, und es gibt git Backends und andere aus anderen Quellen.

Der nützlichste Befehl ist C-x v v (vc-next-Aktion), die die entsprechende nächste Aktion für die Datei werden Sie besuchen. Dies könnte bedeuten, aus dem Repository aktualisieren oder Änderungen commiting, vc.el erneut bindet auch C-x C-q lesen und aus Dateien, wenn Sie ein System verwenden, die es braucht (wie RCS).

Andere sehr nützliche Befehle sind C-x v l und C-x v = , die Ihnen das Protokoll und aktuelle diff für die Datei zeigen, die Sie verwenden.

Aber für echte Produktivität, sollten Sie mit der Single-Datei vermeiden vc.el andere Befehle als für einfache Dinge. Es gibt mehrere Pakete, die Ihnen einen Überblick über den Status Ihrer ganzen Baum geben kann und geben Ihnen mehr Energie, und nicht die Fähigkeit zu erwähnen kohärente Commits über mehrere Dateien zu erstellen.

Die meisten davon sind stark beeinflussen oder auf der Grundlage des ursprünglichen pcl-cvs / PCV für CVS. Es gibt sogar zwei von ihnen das kommt mit Subversion, psvn.el und dsvn.el . Es gibt Pakete für git etc.

Okay, jeder hier ist was perfekte Hinweise Emacs eine große IDE zu machen.

Aber jeder sollte daran denken, dass, wenn Sie Ihre Emacs mit vieler Erweiterung anpassen (vor allem mit denen, die für Typ-Überprüfung im laufenden Betrieb, Funktionsdefinition Lookups usw.) Ihre Emacs sehr geladen werden, sehr langsam für einen Editor .

Um dies zu umgehen, ich würde empfehlen, Emacs in server mode zu verwenden.

Es ist ziemlich einfach zu bedienen, keine Notwendigkeit, Ihre init-Datei anpassen. Sie müssen nur Emacs im Daemon-Modus starten;

emacs --daemon

Dies wird einen Emacs-Server erstellen, dann können Sie es eine Verbindung entweder vom Terminal oder von gui. Ich würde auch nennen es zu machen empfehlen einige Aliase zu erstellen, um einfach.

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

Auf diese Weise wird Emacs Feuer noch schneller als gedit, verspricht.

Das einzige mögliche Problem hier, wenn Sie Emacs-Dämon von Ihrem gelegentlichen Benutzer ausgeführt werden, können Sie wahrscheinlich nicht Emacs-Server als root verbinden.

Also, wenn Sie eine Datei zu öffnen, die Root-Zugriff hat; verwenden tramp statt. Führen Sie einfach Ihren Emacs-Client mit Ihrem normalen Benutzer und offenen Dateien wie diese;

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 

Das machte mir das Leben leichter, kann ich meinen schweren maßgeschneiderten Python IDE in miliseconds auf diese Weise öffnen. Sie können auch --daemon zu Ihrem Systemstart Emacs hinzufügen möchten, oder eine Desktop-Datei für emacsclient erstellen. Das liegt an dir.

Mehr zu Emacs-Daemon und Emacs-Client kann im Wiki gefunden werden;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

Ich bin damit einverstanden, dass Sie über M-x Kompilierung lernen sollten (binden, dass und M-x nächste Fehler zu einer kurzen Tastenfolge).

Erfahren Sie mehr über die Bindungen für die Versionskontrolle (z vc-diff, vc-next-Aktion, etc.)

Schauen Sie in die Register. Sie können nicht nur Standorte in Puffern erinnern, aber ganze Fensterkonfigurationen (C-x r w - Fenster-Konfiguration-zu-Register)

.

Ein Ausgangspunkt (die nicht offensichtlich sein können) für die VC-Funktionen von Emacs zu erkunden ist M-x vc-next-Aktion .

Es funktioniert die „nächste logische Versionskontrolle Betrieb“ auf der aktuellen Datei, je nach dem Zustand der Datei und dem VC-Backend. Also, wenn die Datei nicht unter Versionskontrolle ist, registriert es, wenn die Datei geändert wurde, werden die Änderungen vorgelegt usw.

Es dauert ein wenig gewöhnungsbedürftig, aber ich finde es sehr nützlich.

Standard Keybinding ist C-x v v

Es gibt eine TFS.el für Emacs Integration in Microsoft TFS . Es funktioniert mit jedem TFS, einschließlich der TFS, die Codeplex.com läuft.

Erste Schritte zum Aufbau:

  1. Platz tfs.el im Lastpfad.

  2. In Ihrer .emacs-Datei:

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
    
  3. auch in Ihrer .emacs-Datei, lokale oder globale Tastenbelegungen für tfs Befehle eingestellt. etwa so:

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)
    

kompiliert, die nächsten Fehler und vorherige Fehler sind alle ziemlich wichtige Befehle für C ++ Entwicklung in Emacs (funktioniert auf grep Ausgang auch). Etags, besuchen-Tags-Tabelle und finden-Tag auch wichtig sind. completion.el ist einer der großen unbesungenen Hacks des 20. Jahrhunderts, und können Ihre C ++ Hacking durch eine Größenordnung beschleunigen. Ach ja, und lassen Sie uns nicht vergessen ediff.

Ich habe noch zu lernen, wie Versionskontrolle zu verwenden, ohne eine Shell zu besuchen, aber jetzt, wo ich laufen begeht so viel häufiger (mit git) ich wahrscheinlich zu haben.

Sie können auch finden Tabbar nützlich. Es emuliert das einzige Verhalten, das ich verpasst, wenn sie von Eclipse Emacs bewegen. Gebunden an „“ und „“ zu den vorherigen und nächsten Tab-Leiste bewegen, es wieder erlebt man aus dem Puffer durch Strg-x b die ganze Zeit umgeschaltet wird.

Leider ist die erwähnte Webseite zur Verfügung stellen nicht die richtige Version herunterzuladen. Die meisten Ubuntu-Versionen, jedoch liefern sie in ihren Emacs-Goodies-Pakete.

Ich benutze Emacs unter Windows. die Kompilierung Modul ist schön, aber ich wollte Linie sein schlauer über die Kompilierungsbefehl kompilieren es vermuten lässt. Es ist möglich "zu verwenden, Datei-Variablen“spezifizieren compile-command , aber ich wollte etwas ein wenig schlauer. Also schrieb ich eine kleine Funktion zu helfen. Es schätzt die Kompilierung Befehl zu verwenden, um den Benutzer aufzufordern mit, wenn compile ausgeführt wird.

Die Vermutung Funktion sucht nach einem vbproj oder csproj oder SLN-Datei, und wenn gefunden, es schlägt msbuild. Dann sieht es in den Pufferdateinamen, und abhängig davon, schlägt verschiedene Dinge. Eine .wxs Datei bedeutet, es ist ein WIX Projekt, und Sie wollen wahrscheinlich ein MSI bauen, so dass die Vermutung Logik einen Nmake Befehl für das MSI schlägt. Wenn es ein Javascript-Modul ist, dann ist der Vorschlag JSLint-for-wsh.js ausführen, um die JS-Datei Fussel. Als Absicherung, schlägt er Nmake.

Der Code Ich benutze sieht wie folgt aus:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

habe ich versucht, dies zu tun, wie „vor Beratung“ für die Funktion der Kompilierung, aber konnte es nicht zufriedenstellend zu arbeiten. So definiert ich eine neue Funktion und banden sie auf die gleiche Tastenkombination I für compile verwendet haben.


  

Bearbeiten gibt es jetzt „ smarter-compile.el “, die diese Idee einen Schritt weiter.

Auf Dokumentation Lookup:., Die auf Ihrer Programmiersprache abhängt (s)

C-Bibliotheken und Systemaufrufe werden in der Regel in Manpages dokumentiert. Aus diesem können Sie M-x man verwenden. Einige Dinge können besser in Info-Seiten zu dokumentieren; verwenden M-x info.

Für elisp selbst verwenden C-h f. Für Python, verwendet >>> help(<function, class, module>) im Interpreter.

Ich finde, dass die meisten anderen Sprachen Dokumentation in HTML-Form anbieten. Dafür versuchen, einen integrierten Browser (ich benutze w3m). Legen Sie Ihre BROWSER Umgebungsvariable auf einen Wrapper-Skript um emacsclient -e "(w3m-goto-url-new-session \"$@\")" (auf * nix), falls etwas könnte einen Browser öffnen und Sie wollen es in Emacs geöffnet.

Ich weiß, dass dies eine sehr alte Post ist. Aber diese Frage ist gültig für Emacs Einsteiger.

IMO die beste Art und Weise Emacs zu verwenden, wie ein ide Sprachserver-Protokoll mit Emacs zu verwenden ist. Sie können alle Informationen über Sprachserver in der verknüpften Webseite.

Für eine schnelle Inbetriebnahme, ich möchte Sie bitten, auf diese Seite zu gehen eglot . IMO eglot tut es die Aufgabe ziemlich gut. Es integriert sich gut mit Auto-Vervollständigungen Pakete wie Unternehmen. Bietet finden Referenz und vieles mehr.

Auch für einen Debugger können Sie bestimmen Debugger für bestimmte Sprachen benötigen. Sie können gdb aus Emacs verwenden. Geben Sie einfach M-x gdb.

Für Ihren Code kompilieren, ist es am besten Shell-Befehle zu verwenden. Ich arbeite an diesem Projekt eproj . Das wird eine Weile dauern, es zu vollenden. Aber alle es tut, ist Karten Shell-Befehl Projekttyp. Und baut man über Shell projizieren. Es ist der gleiche Befehl auszuführen. Ich kann beim Abschließen dieses Projekt benötigen. Es ist nicht einsatzbereit, aber wenn Sie ein wenig kennen elisp Sie durch den Code zu gehen.

Abgesehen davon, ist es immer am besten, die Emacs verwenden Befehl kompilieren.

Für die Versionskontrolle, ich habe noch kein anderes Paket gesehen, die die Leistung von magit . Es ist spezifisch für git. Auch für git gibt es ein weiteres Paket git-Zeitmaschine, die finde ich sehr nützlich.

Objektsuche und Klasse-Lookup wird durch Sprachserver-Protokoll zur Verfügung gestellt.

Ein Projektbaum kann mit für ide wie Schnittstelle verwendet werden treemacs .

Es gibt auch ein Projekt Interaktion Bibliothek namens Projektil .

Für Auto-Vervollständigung, finde ich firmen Modus sehr nützlich.

Wirklich kann Emacs gemacht werden, etwas zu tun.

In den letzten Jahren wurde Clang ein wichtiger Bestandteil der Unterstützung ++ Emacs C. Atila Neves hatte einen Vortrag über CppCon 2015: "Emacs als C ++ IDE"

Es ist eine 16 Minuten zu sprechen, wo er Lösungen für die folgenden Themen zeigt:

  • Wechseln zu Definition
  • Auto-Completion
  • On-the-fly-Syntax-Hervorhebung
  • Suchen Datei in Projekt

Folien finden Sie hier .

In dem Unix-oder X-Windows-Stil, weiß ich nicht, dass es eine integrierte IDE ist, die für alles funktioniert.

mit Debugger für die Interaktion, dass nur ein Bestandteil einer IDE, sollten Sie realgud . Die andere Sache, es hat, dass ich nützlich sind Parser für Standortmeldungen, so dass, wenn Sie einen Anruf Stack-Trace und wollen an einer bestimmten Stelle in der Aufrufliste, die Front-End-Schnittstelle das tun bearbeiten.

Mit Abstand dieses Programm könnte Verbesserung nutzen. Aber dann könnte es auch Menschen nutzen, daran zu arbeiten, sie zu verbessern.

Disclaimer: Ich arbeite auf realgud

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top