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.

143voto

alcortes Points 795

Réponse courte :

Le point clé est de dire à emacs d'insérer ce que vous voulez quand vous indentez, ceci est fait en changeant la fonction indent-line. Il est plus facile de la changer pour insérer une tabulation puis de changer les tabulations en 4 espaces que de la changer pour insérer 4 espaces. La configuration suivante résoudra votre problème :

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

Explication :

Desde Indentation contrôlée par le mode majeur @ emacs manual :

Une fonction importante de chaque mode majeur mode est de personnaliser la clé pour pour que l'indentation soit adaptée à la langue éditée.

[...]

La variable indent-line-function est la fonction à utiliser par (et diverses commandes, comme lors de l'appel à indent-region) pour indenter la ligne courante. courante. La commande indent-according-to-mode ne fait pas plus que d'appeler cette fonction.

[...]

La valeur par défaut est indent-relative pour de nombreux modes.

De l'indentation-relative @ manuel emacs :

Indentation relative Espacement jusqu'à sous le point suivant point d'indentation de la ligne non vierge précédente.

[...]

Si la ligne non-blanche précédente n'a pas points d'indentation au-delà du point de colonne le point de départ de la colonne, la commande `tab-to-tab-stop' est effectuée à la place.

Il suffit de remplacer la valeur de la fonction indent-line par la fonction insert-tab et de configurer l'insertion des tabulations à 4 espaces.

11 votes

J'ai le même problème que le PO, votre solution ne fonctionne pas pour moi.

0 votes

Veuillez élaborer davantage. Voulez-vous dire qu'en utilisant les lignes ci-dessus comme seul contenu de votre .emacs et en appelant "M-x indent-according-to-mode", vous n'insérerez pas 4 espaces ?

0 votes

Plutôt que de faire passer la fonction indent-line de indent-relative à insert-tab, vous pouvez simplement modifier vos tabulations avec M-x edit-tab-stops. Ainsi, le comportement de indent-relative sera plus proche de ce que vous souhaitez probablement.

67voto

phils Points 30543

Mise à jour : Depuis Emacs 24.4 :

tab-stop-list est maintenant implicitement étendu à l'infini. Sa valeur par défaut est modifiée en nil ce qui signifie un arrêt de tabulation tous les tab-width colonnes.

ce qui signifie qu'il n'y a plus besoin de paramétrer tab-stop-list de la manière indiquée ci-dessous, comme vous pouvez le garder réglé sur nil .

La réponse originale suit...


Ça me fait toujours un peu de peine de voir des choses comme (setq tab-stop-list 4 8 12 ................) lorsque le number-sequence est là, attendant d'être utilisée.

(setq tab-stop-list (number-sequence 4 200 4))

o

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

0 votes

C'est la seule réponse que j'ai pu faire fonctionner sur mon système.

1 votes

La page de personnalisation de l'indentation d'emacs indique que la liste de tabulation "s'étend implicitement à l'infini par la répétition de la dernière étape" - ce qui signifie qu'une liste (4 8) devrait suffire, sans séquence numérique explicite

0 votes

@JamesWaldby-jwpat7 En effet, cela s'est produit dans 24.4 (2014). NEWS dit : " tab-stop-list est maintenant implicitement étendu à l'infini. Sa valeur par défaut est changée en nil, ce qui signifie qu'un arrêt de tabulation chaque tab-width colonnes." -- donc en fait, vous pouvez simplement utiliser la valeur par défaut de nil .

30voto

Bert F Points 27237

Ne pas confondre variable tab-width avec variable tab-stop-list . Le premier est utilisé pour l'affichage des données littérales. TAB les caractères. Ce dernier contrôle les caractères qui sont insérés lorsque vous appuyez sur la touche TAB dans certains modes.

-- Manuel de GNU Emacs

(customize-variable (quote tab-stop-list))

ou ajouter liste d'arrêt de tabulation l'entrée à custom-set-variables en .emacs fichier :

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

Une autre façon de modifier le comportement des onglets est d'utiliser la commande M-x edit-tab-stops .

Voir le Manuel GNU Emacs sur les tabulations pour plus d'informations sur edit-tab-stops .

10 votes

Tab-width et tab-stop-list sont tous deux nécessaires. tab-width est utilisé pour AFFICHER les onglets, tandis que tab-stop-list est nécessaire pour déterminer les arrêts de tabulation lorsque vous AJOUTEZ des onglets.

3 votes

0 votes

Merci mon Dieu pour cette réponse. Partout ailleurs, on ne fait que dire largeur de tabulation cela n'a rien à voir avec la quantité d'espaces insérés !

21voto

Dave Webb Points 90034

Vous trouverez peut-être plus facile de configurer vos onglets comme suit :

M-x customize-group

Au Customize group: invite entrer indent .

Vous verrez apparaître un écran où vous pourrez définir toutes les options de mise en retrait et les définir pour la session en cours ou les enregistrer pour toutes les sessions futures.

Si tu le fais de cette façon, tu voudras bien mettre en place un fichier de personnalisation .

0 votes

Je dois me souvenir de M-x customize-group - raccourci très pratique !

0 votes

L'indentation semble être de 4, mais elle applique quand même 2 entre les deux. \begin{tikzpicture} y \end{tikzpicture}

11voto

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

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