2009-05-05 26 views
22

Ich fange gerade an, ein Gefühl für Emacs zu bekommen, aber ich bin frustriert mit seiner Tendenz, nicht einzurücken, wenn ich die Return-Taste drücke. Ich weiß, wenn ich C-j drücke, wird es das tun, aber ich kann mich nicht an diese Gewohnheit gewöhnen. Ich kann es einfach nicht. Ich muss zurückkommen, und ich hasse es, jedes Mal neu zu tabgen.Wie kann ich Emacs meinen C-Code automatisch einrücken lassen?

Ich ging in die Optionen und fand C-Modus Haken und C++ Modus Haken, usw. - und sie definiert zwei Tastenkombinationen (10 und 13, und ich erinnerte mich, dass 0A und 0D sind CR/LF, weil ich sie oft verwendet in der Versammlung) - Ich dachte, seit einer sagte "(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))" und die andere die gleiche, aber mit (quote newline) stattdessen, ich nur die -und-Einzug am Ende und dachte, es würde funktionieren.

Aber es tut nicht: Ich setzte und speicherte es, versuchte, ohne Erfolg. Neustart Emacs, immer noch kein Erfolg. Wie kann ich meinen Code einrücken? Es ist schrecklich verrückt, dass Emacs einen Abschluss in Lisp erfordert, nur um es für Ihre grundlegenden Bedürfnisse zu konfigurieren.

Auch als eine Art Nebenfrage: Wie kopiere ich und Einfügen aus der Zwischenablage? Killing/Yanking ist praktisch und alles, aber ich hasse gehen Bearbeiten-> jedes Mal kopieren, wenn ich woanders einfügen möchte.

- EDIT -

in Ordnung, habe ich die folgenden Zeilen in mein .emacs und es funktioniert:

(add-hook 'c-mode-common-hook (lambda() 
     (local-set-key (kbd "RET") 'newline-and-indent)))

Dank für die Hilfe

+4

Warum die Tirade über "Lisp Grad"? In Emacs müssen Sie Option (!) ALLES konfigurieren. In diesem Sinne war Lispeln eine sehr gute Entscheidung. Je nachdem, wann Emacs erfunden wurde. Moderne IDEs diktieren, was du ändern darfst und was nicht, also kann man entscheiden, wie er arbeitet ... –

+1

eine Übertreibung, um meine Frustration zu vermitteln, wusste ich, dass Emacs mit Lisp (oder elisp oder was auch immer) programmierbar ist Ich habe nicht erwartet, dass es eine Voraussetzung ist - ich dachte, im Fenstermodus könnte es ein Frontend für einige der einfacheren Einstellungen geben. Einrücken, wenn Sie Enter drücken. –

+6

"Warum die Tirade?" Peter, verteidigst du ernsthaft die Verwendbarkeit von elisp als Konfigurationsmechanismus? Hee he! – Cheeso

Antwort

14

Werfen Sie einen Blick auf emacswiki - autoindent

Da es vorgeschlagen, setzen Sie folgenden Code in Ihre .emacs

(defun set-newline-and-indent() 
    (local-set-key (kbd "RET") 'newline-and-indent)) 
(add-hook 'c-mode 'set-newline-and-indent) 

Sie können die Variable C Standard Styl anpassen. Gehen Sie in Ihren Emacs zu Optionen -> Emacs anpassen -> Spezifische Option, geben Sie dann c-default-style ein und wählen Sie die gewünschte Option. Auf diese Weise müssen Sie TAB nicht drücken. Geben Sie am Anfang der Zeile ein und drücken Sie ";" Es wird automatisch eingerückt.

this helps

+0

die c-default-style-Option gab mir eine Liste von Sprachen hinter Kontrollkästchen, und nach dem Namen der Sprache, war der Name wieder eingegeben ... Ich verstehe nicht, wie dies CR-Aufruf newline-and-indent –

+0

Das macht variable legt den Einrückungsstil fest; Der CC-Modus wird für mehrere C-ähnliche Sprachen verwendet, und Sie können den Einrückungsstil für jede Sprache festlegen. Lesen Sie das freundliche Handbuch, um herauszufinden, welche Stile es gibt. –

1

Try [Enter], (kbd "enter") oder (read-kbd-macro "enter"), sie alle tun subtil verschiedene Dinge;)

Auch für mich funktioniert Kopieren/Einfügen einfach. Können Sie versuchen, emacs -q auszuführen, und sehen, ob es funktioniert? Wenn dies der Fall ist, könnte dies ein Problem mit Ihren .emacs sein.

Ich habe auch:

(when window-system 
    ;; use extended compound-text coding for X clipboard 
    (set-selection-coding-system 'compound-text-with-extensions)) 

aber das könnte etwas anderes tun;)

0

Kopieren: Bewegung zu starten, CTRL-Raum bewegen zu Ende, ALT-W

Einfügen: Strg-y

auf Unix: linke Maustaste kopieren, rechts Maus zum Einfügen

6

Zusätzlich zu den anderen Vorschlägen, versuchen Sie C-c C-a, um die Auto-Newline-Funktion zu aktivieren, so dass Ihre Modellnummer C/la lautet. Dann müssen Sie die meiste Zeit nicht einmal die Eingabetaste drücken. Wenn Sie ein Semikolon oder eine Klammer eingeben, werden Zeilenumbrüche eingefügt und Ihr Code wird eingerückt.Manchmal müssen Sie die Eingabetaste drücken, und Sie erhalten keine automatische Einrückung (es sei denn, Sie binden RET, wie in einer anderen Antwort vorgeschlagen), aber wenn Sie nur die nächste Zeile eingeben, bemerken Sie möglicherweise, dass es richtig eingerückt wird, wenn Sie einige eingeben Interpunktionszeichen. (; Typ d für Verzeichnis und finden CC-Modus gibt es getrennt von dem Knoten für Emacs)

Um mit „Lisp Grad“, Typ C-h i für den Info-Browser und gehen Sie auf den Knoten für „CC-Modus“ loszulegen .

17

stelle ich die Return-Taste fungieren als eine new-line-and-Absicht in meiner ~/.emacs Datei global:

(global-set-key "\C-m" 'newline-and-indent) 

Arbeiten für mich.

+0

Ich habe das aufgemotzt, weil die akzeptierten Antworten für mich nicht funktionieren, während dies funktioniert. Ich weiß nicht, ob es daran liegt, dass ich Emacs 23 oder was benutze, aber mit (kbd "RET") bekomme ich immer "Invalid Function". –

5

Wenn Sie die ganze c/C++ Datei einrücken möchten, tun Sie nur

  1. Zeichen alles: STRG + x h
  2. drücken TAB

Das, btw, funktioniert auch für XML, Python-Code und andere Typen.

0

Der einfache Weg dazu ist electric-indent-mode zu verwenden. Wenn Sie es manuell aktivieren möchten, tun nur

M-x electric-indent-mode 

Um es automatisch zu ermöglichen, folgendes sagen in Ihrem .emacs:

(electric-indent-mode) 

Dies wird die Standard in Emacs 24.4 sein.

Verwandte Themen