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.

  1. Wenn kein Text über Spiegelstrich 8 Räume
  2. 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?

War es hilfreich?

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 auf nil geändert, was bedeutet, ein Register alle tab-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

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 
               )))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top