Set 4 Raum Einrücken in Emacs im Textmodus
-
09-06-2019 - |
Frage
Ich habe nicht erfolgreich gewesen Emacs in immer von 8 Raum Registerkarten bis 4 Raum Tabs zu wechseln, wenn die Taste TAB in Puffern mit dem Hauptmodus text-mode
. Ich habe die folgenden meinen .emacs
hinzugefügt:
(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 ändern (oder meine Puffer lokalen Variablen) die TAB Taste immer tut das gleiche.
- Wenn kein Text über Spiegelstrich 8 Räume
- Wenn Text in der vorhergehenden Zeile ist Spiegelstrich zu Beginn des zweiten Wortes
So viel wie ich Emacs lieben das ist immer ärgerlich. Gibt es eine Möglichkeit Emacs mindestens Spiegelstrich 4 Platz zu machen, wenn es in der vorherige Zeile nicht Text ist?
Lösung
(customize-variable (quote tab-stop-list))
oder fügen Sie tab-stop-Liste Eintrag custom-set-Variablen in .emacs Datei:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(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))))
Andere Tipps
Kurze Antwort:
Der entscheidende Punkt ist, Emacs zu sagen, was Sie wollen einzulegen, wenn einrücken, dies durch eine Änderung der indent-Line-Funktion erfolgt. Es ist einfacher, es zu ändern, um eine Registerkarte einzufügen und dann Registerkarten in 4 Felder ändern, als es ändern 4 Leerzeichen einzufügen. Die folgende Konfiguration wird Ihr Problem lösen:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
Erklärung:
Einrückungen Controlled von Major-Modus @ emacs Handbuch :
Eine wichtige Funktion jedes Haupt Modus ist der Schlüssel zu gestalten einrücken richtig für die Sprache Wesen bearbeitet werden.
[...]
Die indent-Line-Funktion Variable die Funktion verwendet werden, indem (und verschiedene Befehle, wie beim Aufruf Gedankenstrich-Region), um die aktuellen einrücken Linie. Der Befehl indent-nach-to-Modus funktioniert nicht mehr diese Funktion als nennen.
[...]
Der Standardwert ist indent-Relativ für viele Modi.
Von indent-Relativ @ Emacs Handbuch:
einrücken-Relativ Rücke auf unter nächste indent Punkt in vorherigen nicht leeren Zeile.
[...]
Wenn die vorherige nicht leere Zeile hat keine Gedankenstrich Punkte jenseits der Spalte Punkt beginnt bei `Tab-to-tab-stop‘ getan wird statt.
Ändern Sie einfach den Wert der indent-Line-Funktion auf den Einsatz-Tab-Funktion und Reiter Einfügen als 4 Felder konfigurieren.
Update: Da Emacs 24.4:
tab-stop-list
wird nun implizit bis ins Unendliche verlängert. Der Standardwert wird aufnil
geändert, was bedeutet, ein Register alletab-width
Spalten zu stoppen.
, was bedeutet, dass es nicht mehr ist eine Notwendigkeit tab-stop-list
in der Art und Weise unten sein einstellen, wie Sie halten es nil
gesetzt.
Original Antwort folgt ...
Es ist immer schmerzt mich leicht Dinge wie (setq tab-stop-list 4 8 12 ................)
wenn die number-sequence
Funktion sitzt da und wartet zu sehen, verwendet zu werden.
(setq tab-stop-list (number-sequence 4 200 4))
oder
(defun my-generate-tab-stops (&optional width max)
"Return a sequence suitable for `tab-stop-list'."
(let* ((max-column (or max 200))
(tab-width (or width tab-width))
(count (/ max-column tab-width)))
(number-sequence tab-width (* tab-width count) tab-width)))
(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))
Sie können es einfacher, Ihre Tabs setzen sich wie folgt zusammen:
M-x customize-group
Am Customize group:
Aufforderung eingeben indent
.
Sie werden einen Bildschirm sehen, wo Sie alles, was Sie Einrücken Optionen festlegen und sie für die aktuelle Sitzung festgelegt oder sie für alle zukünftigen Sitzungen speichern.
Wenn Sie es auf diese Weise Sie eine Datei Anpassungen einzurichten.
(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(c-set-offset 'comment-intro 0)
Dies funktioniert für C ++ Code und den Kommentar auch innen
(defun my-custom-settings-fn ()
(setq indent-tabs-mode t)
(setq tab-stop-list (number-sequence 2 200 2))
(setq tab-width 2)
(setq indent-line-function 'insert-tab))
(add-hook 'text-mode-hook 'my-custom-settings-fn)
Dieses Problem wird durch fehlende Tabstopps nicht verursacht; es ist, dass Emacs hat eine (neue?) Registerkarte Methode aufgerufen indent-Bezug, die in einer Reihe aufstellen tabellarische Daten konzipiert zu sein scheint. Die TAB-Taste wird das Verfahren kartiert Gedankenstrich-for-Register-Befehl aus, der fordert eine beliebige Methode der variable Einrückung-line-Funktion festgelegt ist, die für die Textmodus-Einrückung relative Methode. Ich havn't einen guten Weg gefunden, um die Einzug-line-Funktion Variable außer Kraft zu setzen (Textmodus Haken funktioniert nicht, vielleicht wird es zurückgesetzt, nachdem der Modus-Haken laufen bekommt?), Aber eine einfache Möglichkeit, um loszuwerden Verhalten ist nur die Absicht-for-tab-Befehl Methode chuck durch TAB auf die einfachere Tab-to-tab-stop-Methode Einstellung:
(define-key Text-Modus-Karte (kbd "TAB") ‚Tab-to-tab-stop)
Versuchen Sie folgendes:
(add-hook 'text-mode-hook
(function
(lambda ()
(setq tab-width 4)
(define-key text-mode-map "\C-i" 'self-insert-command)
)))
Das macht TAB einfügen immer eine wörtliche TABULATORZEICHEN mit Tab alle 4 Zeichen hält (aber nur im Textmodus). Wenn das nicht das, was Sie für Fragen, beschreiben Sie das Verhalten, das Sie sehen möchten.
Sie können diese Zeilen Code in Ihre .emacs-Datei. Es fügt einen Haken für den Textmodus Insert-Register zu verwenden, statt indent-Verwandten.
(custom-set-variables
'(indent-line-function 'insert-tab)
'(indent-tabs-mode t)
'(tab-width 4))
(add-hook 'text-mode-hook
(lambda() (setq indent-line-function 'insert-tab)))
Ich hoffe, es hilft.
Sie einfach den Stil mit c-Set-Stil zu ändern war für mich genug.
Fügen Sie diese auf Ihre .emacs-Datei:
Damit wird die Breite festgelegt, dass eine Registerkarte 2-Zeichen angezeigt wird (ändern Sie die Nummer 2 auf, was Sie wollen)
(setq default-tab-width 2)
Um sicherzustellen, dass Emacs tatsächlich Tabs statt Leerzeichen verwenden:
(global-set-key (kbd "TAB") 'self-insert-command)
Als beiseite, die Standardeinstellung für Emacs, wenn sie über eine Registerkarte backspacing ist es in Leerzeichen zu konvertieren und dann ein Leerzeichen löschen. Das kann lästig sein. Wenn Sie es wollen nur das Register löschen, können Sie dies tun:
(setq c-backspace-function 'backward-delete-char)
Genießen Sie!
Customization kann (setq tab width 4)
Schatten entweder so setq-default
verwenden oder lassen anpassen wissen, was Sie tun. Ich hatte auch Probleme ähnlich den OP und fixierte es mit dieser allein, brauchte nicht tab-stop-list
oder keine insert
Funktionen anzupassen:
(custom-set-variables
'(tab-width 4 't)
)
Gefunden es sinnvoll, diese unmittelbar nach (einer Spitze von emacsWiki) hinzuzufügen:
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
Die besten Antworten haben für nicht arbeiten, bis ich dies in der .emacs-Datei geschrieben:
(global-set-key (kbd "TAB") 'self-insert-command)
Dies ist die einzige Lösung, die eine Registerkarte aus immer hält für mich eingesetzt zu werden, ohne eine Sequenz oder die Umwandlung von Tabulatoren in Leerzeichen. Diese beiden schien angemessen, aber verschwenderisch:
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (quote (4 8))
)
Beachten Sie, dass quote
zwei Zahlen arbeiten muss (aber nicht mehr!).
Auch in den meisten wichtigen Modi (Python
zum Beispiel), ist Einbuchtung automatische in Emacs. Wenn Sie außerhalb des automatischen Einzug einrücken müssen, verwenden Sie:
M - i
Haben Sie versucht,
(setq tab-width 4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
Durch die Art und Weise, für C-Modus , füge ich (setq-default c-basic-offset 4)
zu Emacs. Siehe http://www.emacswiki.org/emacs/IndentingC .
Aus meiner init-Datei, anders, weil ich wollte Leerzeichen anstelle von Tabulatoren:
(add-hook 'sql-mode-hook (lambda () (progn (setq-default tab-width 4) (setq indent-tabs-mode nil) (setq indent-line-function 'tab-to-tab-stop) (modify-syntax-entry ?_ "w") ; now '_' is not considered a word-delimiter (modify-syntax-entry ?- "w") ; now '-' is not considered a word-delimiter )))