169 votes

Définir un retrait de 4 espaces dans Emacs en mode texte

Je n'ai pas réussi à faire en sorte qu'Emacs passe des tabulations à 8 espaces aux tabulations à 4 espaces en appuyant sur la touche TAB dans des tampons avec le mode majeur text-mode . J'ai ajouté ce qui suit à mon .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)

Peu importe comment je change mon .emacs (ou les variables locales de ma mémoire tampon), le fichier TAB Le bouton fait toujours la même chose.

  1. S'il n'y a pas de texte au-dessus, mettez en retrait 8 espaces
  2. S'il y a du texte sur la ligne précédente, faites un retrait jusqu'au début du deuxième mot.

Même si j'aime beaucoup Emacs, cela devient ennuyeux. Y a-t-il un moyen de faire en sorte qu'Emacs indente au moins 4 espaces lorsqu'il n'y a pas de texte dans la ligne précédente ?

0 votes

Pour une ligne de mode C++ ou csharp-mode j'ai ajouté (setq tab-width 4) (setq c-basic-offset 4) à la fin de (defun csharp-mode () ... ) et cela a fait l'affaire pour que (1) les tabulations s'affichent avec 4 caractères au lieu de 8 et (2) quand j'appuie sur la touche tabulation j'obtiens 4 espaces sur une nouvelle ligne.

0 votes

Très tard, mais je viens de réaliser que l'utilisation de (setq tab-width 4) ne fonctionne pas, mais que si vous utilisez (setq-default tab-width 4), vous n'avez pas besoin de faire autre chose.

0 votes

Voir ma réponse si vous voulez utiliser des espaces mais passer aux tabulations.

10voto

lawlist Points 4056
(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)

0 votes

Cela a fonctionné pour moi alors que d'autres sur cette page ne l'ont pas fait.

0 votes

Fonctionne dans emacs 26.3

10voto

user2318996 Points 11
(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)

cela fonctionne pour le code C++ et le commentaire à l'intérieur aussi

0 votes

Je suis en retard pour la fête, mais merci. Je n'arrive pas à comprendre pourquoi emacs aurait besoin d'instructions spécifiques pour appliquer ses règles d'indentation au code C/C++ également. Je vais regarder vim à l'avenir...

0 votes

Je veux poser cette question moi-même JUSTE POUR POUVOIR ACCEPTER CETTE RÉPONSE. Je lui donnerais une prime si je pouvais. J'étais très, très contrarié qu'un changement ait rendu emacs réticent à tabuler à 4, je passais en revue toutes les solutions de cette page, et vous m'avez épargné une énorme quantité de travail !

7voto

Ce problème n'est pas causé par des taquets de tabulation manquants ; c'est qu'emacs a une (nouvelle ?) méthode de tabulation appelée indent-relative qui semble conçue pour aligner les données tabulaires. La touche TAB est associée à la méthode indent-for-tab-command, qui appelle la méthode définie par la variable indent-line-function, qui est la méthode indent-relative pour le mode texte. Je n'ai pas encore trouvé une bonne façon de remplacer la variable indent-line-function (le crochet du mode texte ne fonctionne pas, donc peut-être qu'il est réinitialisé après l'exécution des crochets du mode), mais une façon simple de se débarrasser de ce comportement est d'abandonner la méthode intent-for-tab-command en fixant TAB à la méthode plus simple tab-to-tab-stop :

(define-key text-mode-map (kbd "TAB") 'tab-to-tab-stop)

7voto

gigilibala Points 41

Vous pouvez ajouter ces lignes de code à votre fichier .emacs. Elles ajoutent un hook pour que le mode texte utilise insert-tab au lieu d'indent-relative.

(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)))

J'espère que cela vous aidera.

6voto

cjm Points 44090

Essayez ça :

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

Ainsi, TAB insérera toujours un caractère TAB littéral avec des taquets de tabulation tous les 4 caractères (mais uniquement en mode Texte). Si ce n'est pas ce que vous demandez, veuillez décrire le comportement que vous souhaitez voir.

4 votes

Je pense que l'OP veut des espaces au lieu des tabulations (pour que la touche Tab insère 4 espaces).

0 votes

En conjonction avec Aquamacs 2.4, cette réponse particulière me donne des caractères dans une autre langue au lieu d'un onglet : . Si la touche de tabulation est pressée plus d'une fois, le résultat est : (sans aucune séparation). Et il en va de même pour chaque appui successif sur la touche de tabulation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X