Emacs Einrückung mit Tabulatoren


8

Gibt es eine Möglichkeit, Emacs-Einrückungscode nur mit Registerkarten global und nicht mit Leerzeichen zu erstellen? Ich kenne den Befehl tabify. Ich würde es vorziehen, wenn die automatische Einrückung Tabulatoren anstelle einer Mischung aus Tabulatoren und Leerzeichen verwendet, wie dies in der Standardkonfiguration der Fall ist.

Antworten:


7

Nun, einrücken mit Tabs, sollten Sie sicherstellen , dass indent-tabs-modeist t(das ist der Standardwert). Um jedoch nur Registerkarten zu erhalten, müssen Sie den Modus für die Einrückung so anpassen, dass jede Zeile durch ein Vielfaches Ihrer Einrückung eingerückt wird tab-width(Standard 8). Im C-Modus können Sie beispielsweise versuchen, die Einstellung c-basic-offsetauf 8 zu setzen.

Sie können Ihren tab-widthWert auch auf einen kleineren Wert reduzieren , sodass Emacs keine Leerzeichen verwenden muss, um die einzelnen Einrückungsstufen zu erreichen. Aber wenn Sie das tun, werden alle anderen, die an Ihrem Code arbeiten müssen (und die standardmäßigen 8-stelligen Tabulatoren verwenden), verärgert sein.

Ich fordere Sie auf, es sich noch einmal zu überlegen. Persönlich finde ich es ärgerlich, an Code zu arbeiten, der mit Tabulatoren eingerückt ist, insbesondere wenn es sich nicht um Tabulatoren mit 8 Leerzeichen handelt. (Das Schlimmste ist Code, bei dem einige Zeilen Leerzeichen verwenden, einige Zeilen Tabulatoren verwenden und es sich eindeutig nicht um 8 Leerzeichen handelt.) Tun Sie uns allen einen Gefallen und gerecht (setq indent-tabs-mode nil).


Ich würde diese Frage für die zweite Paragragh-Einstellung der Registerkartenbreite markieren und der Kommentar mischt keine Tabulatoren und Leerzeichen. Aber wenn Ihre Tabulatorbreite eingestellt ist, ist die Bearbeitung der Einrückungen mit einem Tabulator für jede Ebene viel einfacher als mit mehreren Leerzeichen
user151019

Ich denke, Ihr dritter Absatz ist im Allgemeinen hilfreich, aber oft können wir den Einrückungsstil des ursprünglichen Autors nicht kontrollieren, z. B. an wen wir Pull / Merge-Anfragen senden. Ich habe meine Vorlieben, sie haben ihre. Ich denke, es ist respektvoll, ihren Einrückungsstil auf einem vernünftigen Niveau zu verwenden, daher liegt die Wahl gelegentlich nicht bei uns .
R2evans

7

Emacs wird mit mehreren vordefinierten Stilen für C-Einrückungen geliefert, oder Sie können Ihre eigenen schreiben, wenn keiner Ihren Anforderungen entspricht. Unter den Standardstilen scheint es, dass Sie suchen linux(den Stil, der in der Linux-Kernelquelle verwendet wird), der Einrückungen von 8 Spalten enthält und Tabulatorzeichen der Breite 8 verwendet.

Sie können diese Einstellungen zu Ihrem Standardstil für C machen, indem Sie dies in Folgendes einfügen .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Stellen Sie jedoch sicher, dass Sie diese Einstellungen nicht verwenden, wenn Sie mit anderen Personen mit anderen Einstellungen zusammenarbeiten. Insbesondere die Verwendung von Registerkarten macht Sie zu Feinden. Wenn eine bestimmte Datei in einem bestimmten Stil beibehalten werden soll, können Sie Dateivariablen verwenden , um sicherzustellen, dass jeder, der die Datei in Emacs bearbeitet, dieselben Einstellungen verwendet:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Wenn Sie ein ganzes Projekt mit ähnlich eingerückten C-Dateien haben, verwenden Sie Verzeichnisvariablen, anstatt jede Datei zu verschmutzen. Erstellen Sie eine Datei .dir-locals.elmit dem folgenden Inhalt:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

Tabs nerven mich, aber ich musste herausfinden, wie Emacs nur Tabs zum Einrücken verwenden, damit ich an dem Code eines anderen arbeiten konnte. Folgendes hat bei mir funktioniert:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Ich bemerkte, dass beim Drücken der Tabulatortaste, bevor ich mit irgendetwas herumspielte, diese automatisch um 2 Spalten eingerückt wurde. Wenn Sie "tab-width" so einstellen, dass es mit dem 2-Spalten-Versatz übereinstimmt, können Emacs beim automatischen Formatieren Tabs verwenden. Ich habe im nxml-Modus gearbeitet, aber ich denke, das sollte für jeden Modus funktionieren.


Nett. Das hat mich auch gestört. Es ist nicht intuitiv, die Tabulatorbreite so einzustellen, dass sie dem Spaltenversatz entspricht. Gute Arbeit. Ich habe diese Idee im C ++ - Modus verwendet
Sean Lynch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.