2008-12-05 16 views
5

Ich möchte das fehlerhafte Standard-Tabbing-Schema in Emacs überschreiben, so dass es wie die meisten anderen Editoren (Eclipse, Notepad ++) funktioniert. Ich möchte es so einstellen, dass unabhängig vom Modus Tab einen Tab einfügt, und wenn ich Enter drücke, halte ich mich auf meiner aktuellen Tab-Tiefe.Verbesserte Registerkarte in Emacs

Ich versuchte dies, aber es tut nichts:

(global-set-key (kbd "TAB") 'tab-to-tab-stop) 
(setq default-tab-width 4) ;; 8 is way too many 
+0

Einige Hauptmodi können dies überschreiben. Kannst du mehr über deine Umgebung sagen? – dmckee

+2

Ich bin wirklich bestrebt, es für alle Umgebungen zu bekommen. Es ärgert mich wirklich, wenn es entscheidet, dass es besser als ich weiß, und lehnt es ab, mir zu erlauben, mich einzurücken, wie ich bitte. z.B. in apache config erlaubt es mir 1, 8 char Registerkarte, und nicht weiter. Der elisp-Modus ist gesund, aber nicht im Einklang mit dem üblichen. – AlexH

+0

Wenn es nur eine 8-stellige Registerkarte erlaubt, ist die Änderung * das * ändern, ändern, was die Tabstopps sind. (Oder ändern Sie die Einzugfunktion.) – ShreevatsaR

Antwort

9

Um die Enter-Taste gelangen Sie in die nächste Zeile zu machen und automatisch einrücken, Sie

(global-set-key (kbd "RET") 'newline-and-indent) 

in Ihrem .emacs setzen können. [Oder Sie können C-j anstelle von Enter drücken.] Sobald Sie das haben, müssen Sie Registerkarten nie mehr manuell einfügen, weil Emacs eine neue Zeile nach einer öffnenden Klammer usw. automatisch um eine zusätzliche Tiefe einrückt. Wenn Sie das ändern möchten Einrückung, Sie können TAB drücken, bis Sie zum richtigen Einzug kommen, und dann von dort aus tippen. [Und wenn Sie eine schließende Klammer schreiben, ist Emacs schlau genug, um diese Klammer um eine Einrückebene nach hinten zu ziehen.]

Sie sollten die (global-set-key (kbd "TAB") 'tab-to-tab-stop) entfernen, damit dies funktioniert.

1

C-j funktioniert die Newline + indent Funktionalität, die Sie eingeben aus drücken wollen.

7

Viele Hauptmodi überschreiben die TAB Bindung, zum Beispiel cc-mode bindet TAB zu 'c-indent-to-column.

Die 'global-set-key, die vorgeschlagen wird, tut nichts, da fast jeder Hauptmodus die TAB überschrieben hat.

Ein Trick, der für Sie funktionieren könnte, besteht darin, den Ansatz zu kopieren, den 'pabbrev verwendet, und einen globalen untergeordneten Modus zu definieren, der die TAB-Bindung enthält. Sie könnten das tun, wie so:

(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode") 
(define-minor-mode just-tab-mode 
    "Just want the TAB key to be a TAB" 
    :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap 
    (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command)) 

Dies ist jedoch deaktiviert alle TAB Abschluss. Sie erhalten wahrscheinlich die besten Ergebnisse, wenn Sie die einzelnen Hauptmodi nacheinander überschreiben (um zu vermeiden, dass die Vollendung der TAB abgeschlossen wird).

2

Das hat mich auch gestört, als ich anfing Emacs zu benutzen. Ich habe es aber lieben gelernt. Wenn ich passend einrücken möchte, drücke ich <tab>;, wenn ich eine literale Registerkarte einfügen möchte, traf ich M-i (Meta und "i" oder - in einigen Parlamenten), die an tab-to-tab-stop gebunden ist.

3

Ich denke, Trey Jackson Antwort ist wahrscheinlich, was Sie wollen, außer möglicherweise 'self-insert-command anstelle von 'indent-for-tab-command verwenden. Ich persönlich bevorzuge das Standardverhalten von Emacs, aber self-insert-command macht das, was es sagt, anstatt etwas Fantastisches zu tun, wie zum Beispiel, dass der Code gut formatiert ist.

Die paar Male ich eigentlich wollen eine Registerkarte (nicht Einzug) einfügen Ich drücke M-i.

+0

'M-i' !!!! Sir, Sie haben mich persönlich vor dem Karpaltunnel gerettet ... "Control-q " begann meine linke Hand zu belasten. –

+0

'M-i' ist' tab-to-tab-stop', das nur ein Tab-Zeichen einfügt, wenn 'indent-tabs-mode' erfüllt ist. Sie können leicht feststellen, dass "C-q C-i" einfacher zu tippen ist als "C-q TAB" (vor allem, wenn Sie die Feststelltaste als Ctrl-Taste konfiguriert haben). – phils

2

Sie könnten sich für diesen untergeordneten Modus interessiert sein, den ich unter http://github.com/vohrta/regtab erstellt habe.

Es macht es so, dass, wenn Sie die Tabulatortaste entweder ein Tab-Zeichen (wenn Einrückung-Tabs-Mod ist nicht NULL) oder Tab-Breite Leerzeichen an Punkt platziert werden.Der Modus ist auch in der Lage, das zu behandeln, was Sie als normales Verhalten in einem Bereich mit ausgewähltem Text ansehen könnten, und das Verschieben von Registerkarten, um Registerkarten am Anfang der Zeile (oder der Liniengruppe) zu entfernen.

Sie können sie jederzeit aktivieren oder deaktivieren, indem Sie den M-x-Regtab-Modus drücken.

+2

Ihr Link funktioniert nicht mehr. – user857990

Verwandte Themen