Es ist mir nicht gelungen, Emacs dazu zu bringen, von 8 Leerzeichen-Registerkarten auf 4 Leerzeichen-Registerkarten zu wechseln, wenn die TABIn-Puffer im Hauptmodus gedrückt werden text-mode
. Ich habe Folgendes zu meinem hinzugefügt .emacs
:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)
Egal wie ich meine .emacs
Datei (oder die lokalen Variablen meines Puffers) ändere, die TABSchaltfläche macht immer das Gleiche.
- Wenn oben kein Text vorhanden ist, rücken Sie 8 Leerzeichen ein
- Wenn sich in der vorherigen Zeile Text befindet, rücken Sie am Anfang des zweiten Wortes ein
So sehr ich Emacs liebe, das wird nervig. Gibt es eine Möglichkeit, Emacs auf mindestens 4 Leerzeichen einzurücken, wenn in der vorherigen Zeile kein Text enthalten ist?
emacs
indentation
Cristian
quelle
quelle
(setq-default tab-width 4)
NICHT dasselbe wie(setq tab-width 4)
sicher zu gehen, dass Sie den "-Standard" nicht verpasst haben!Antworten:
oder fügen Sie den benutzerdefinierten Variablen in der .emacs- Datei einen Tab-Stop-List- Eintrag hinzu :
quelle
'(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)))
? Nun, solange es funktioniert, denke ich ...: P'(tab-stop-list (quote (4)))
.quote
zwei Zahlen benötigt werden, um die Sequenz ad infinitum fortzusetzen. Siehe: stackoverflow.com/a/42148697/2662028Kurze Antwort:
Der wichtigste Punkt ist, emacs anzuweisen, beim Einrücken alles einzufügen, was Sie wollen. Dies erfolgt durch Ändern der Einrückungslinienfunktion. Es ist einfacher, es zu ändern, um eine Registerkarte einzufügen, und dann die Registerkarten in 4 Leerzeichen zu ändern, als es zu ändern, um 4 Leerzeichen einzufügen. Die folgende Konfiguration löst Ihr Problem:
Erläuterung:
Aus dem vom Major Mode @ emacs-Handbuch gesteuerten Einzug :
Aus dem indent-relative @ emacs-Handbuch:
Ändern Sie einfach den Wert der Einrückungslinienfunktion in die Funktion zum Einfügen von Registerkarten und konfigurieren Sie das Einfügen von Registerkarten als 4 Leerzeichen.
quelle
Update: Seit Emacs 24.4:
Dies bedeutet, dass keine Einstellungen mehr
tab-stop-list
auf die unten gezeigte Weise erforderlich sind, da Sie diese Einstellung beibehalten könnennil
.Die ursprüngliche Antwort folgt ...
Es schmerzt mich immer leicht, Dinge zu sehen, wie
(setq tab-stop-list 4 8 12 ................)
wenn dienumber-sequence
Funktion dort sitzt und darauf wartet, verwendet zu werden.oder
quelle
tab-stop-list
wird jetzt implizit auf unendlich erweitert. Der Standardwert wird auf null geändert, was bedeutet, dass alletab-width
Spalten mit einem Tabulator versehen werden ." - Sie können also einfach den Standardwert von verwendennil
.Möglicherweise ist es einfacher, Ihre Registerkarten wie folgt einzurichten:
Customize group:
Geben Sie an der Eingabeaufforderung einindent
.Sie sehen einen Bildschirm, in dem Sie alle Einrückungsoptionen festlegen und für die aktuelle Sitzung festlegen oder für alle zukünftigen Sitzungen speichern können.
Wenn Sie dies auf diese Weise tun, möchten Sie eine Anpassungsdatei einrichten .
quelle
quelle
quelle
26.3
Dies funktioniert auch für C ++ - Code und den darin enthaltenen Kommentar
quelle
Dieses Problem wird nicht durch fehlende Tabulatoren verursacht. Emacs hat eine (neue?) Tab-Methode namens Indent-Relative, die darauf ausgelegt zu sein scheint, Tabellendaten auszurichten. Die TAB-Taste ist der Methode indent-for-tab-command zugeordnet, die die Methode aufruft, auf die die Variable indent-line-function eingestellt ist. Dies ist eine einrückungsrelative Methode für den Textmodus. Ich habe keinen guten Weg gefunden, um die Einrückungsfunktionsvariable zu überschreiben (Textmodus-Hook funktioniert nicht, also wird er möglicherweise zurückgesetzt, nachdem die Mode-Hooks ausgeführt wurden?), Aber einen einfachen Weg, dies zu beseitigen Das Verhalten besteht darin, nur die Intent-for-Tab-Befehlsmethode zu verwenden, indem TAB auf die einfachere Tab-to-Tab-Stop-Methode gesetzt wird:
(Define-Key-Textmodus-Map (kbd "TAB") 'Tab-to-Tab-Stop)
quelle
Versuche dies:
Dadurch fügt TAB immer alle 4 Zeichen ein wörtliches TAB-Zeichen mit Tabulatoren ein (jedoch nur im Textmodus). Wenn Sie nicht danach fragen, beschreiben Sie bitte das Verhalten, das Sie sehen möchten.
quelle
Sie können diese Codezeilen zu Ihrer .emacs-Datei hinzufügen. Es wird ein Hook für den Textmodus hinzugefügt, um die Registerkarte "Einfügen" anstelle von "Einzug relativ" zu verwenden.
Ich hoffe, es hilft.
quelle
Nur den Stil mit C-Set-Stil zu ändern, hat mir gereicht.
quelle
Fügen Sie dies Ihrer .emacs-Datei hinzu:
Dadurch wird die Breite, in der eine Registerkarte angezeigt wird, auf 2 Zeichen festgelegt (ändern Sie die Nummer 2 nach Ihren Wünschen).
So stellen Sie sicher, dass emacs tatsächlich Tabulatoren anstelle von Leerzeichen verwendet:
Abgesehen davon besteht die Standardeinstellung für Emacs beim Zurücksetzen über eine Registerkarte darin, sie in Leerzeichen zu konvertieren und dann ein Leerzeichen zu löschen. Das kann ärgerlich sein. Wenn Sie möchten, dass nur die Registerkarte gelöscht wird, können Sie Folgendes tun:
Genießen!
quelle
Dies ist die einzige Lösung, die verhindert, dass ein Tab jemals für mich eingefügt wird, ohne dass eine Reihenfolge oder Konvertierung von Tabs in Leerzeichen erfolgt. Beides schien angemessen, aber verschwenderisch:
Beachten Sie, dass
quote
zwei Zahlen benötigt werden, um zu funktionieren (aber nicht mehr!).In den meisten Hauptmodi (
Python
zum Beispiel) erfolgt die Einrückung in Emacs automatisch. Wenn Sie außerhalb des automatischen Einzugs einrücken müssen, verwenden Sie:M- -i
quelle
Anpassungen können Schatten verwenden,
(setq tab width 4)
also entweder verwendensetq-default
oder Customize wissen lassen, was Sie tun. Ich hatte auch ähnliche Probleme wie das OP und habe es allein damit behoben, musste keine Anpassungen vornehmentab-stop-list
oder irgendwelcheinsert
Funktionen:Fand es nützlich, dies sofort danach hinzuzufügen (ein Tipp von emacsWiki):
quelle
Die besten Antworten haben nicht funktioniert, bis ich dies in die .emacs-Datei geschrieben habe:
quelle
Hast du es versucht
quelle
quelle
Übrigens füge ich für den C-Modus
(setq-default c-basic-offset 4)
.emacs hinzu. Weitere Informationen finden Sie unter http://www.emacswiki.org/emacs/IndentingC .quelle
Anders als in meiner Init-Datei, weil ich Leerzeichen anstelle von Tabulatoren wollte:
quelle
Diese Antwort ohne Haken geändert :
quelle