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.

4voto

dividebyzero Points 408

Le simple fait de changer le style avec c-set-style était suffisant pour moi.

4voto

qwerty9967 Points 198

Ajoutez ceci à votre fichier .emacs :

Ceci fixera la largeur d'affichage d'une tabulation à 2 caractères (changez le chiffre 2 par ce que vous voulez).

(setq default-tab-width 2)

Pour s'assurer que emacs utilise réellement les tabulations au lieu des espaces :

(global-set-key (kbd "TAB") 'self-insert-command)

Pour l'anecdote, le défaut d'emacs lorsqu'on recule sur une tabulation est de la convertir en espace et de supprimer un espace. Cela peut être gênant. Si vous voulez qu'il supprime simplement la tabulation, vous pouvez faire ceci :

(setq c-backspace-function 'backward-delete-char)

Profitez-en !

0 votes

Ne répond pas au critère d'au moins 4 espaces demandé dans la question.

4voto

Yary Points 305

Les personnalisations peuvent faire de l'ombre (setq tab width 4) donc soit utiliser setq-default ou faites savoir à Customize ce que vous faites. J'ai également eu des problèmes similaires à ceux de l'OP et je les ai résolus avec cette seule solution, je n'ai pas eu besoin de l'ajuster. tab-stop-list ou tout insert fonctions :

(custom-set-variables
 '(tab-width 4 't)
 )

J'ai trouvé utile d'ajouter ceci immédiatement après (une astuce du emacsWiki) :

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

0 votes

Cela me permet juste de remettre en alignement à gauche quelque chose qui est déjà indenté. La deuxième fois, la tabulation ramène le texte à l'indentation de départ. Appuyer sur la touche Tab sur un texte aligné à gauche ne fait rien du tout.

0 votes

Y M+i comme il est mentionné et de travailler avec 4 espaces en cette réponse a les 8 espaces ici à la place.

3voto

ryanpcmcquen Points 2896

C'est la seule solution qui empêche l'insertion d'une tabulation, sans séquence ni conversion des tabulations en espaces. Ces deux solutions me semblaient adéquates, mais inutiles :

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

Notez que quote a besoin de deux chiffres pour fonctionner (mais pas plus !).

De même, dans la plupart des modes majeurs ( Python par exemple), l'indentation est automatique dans Emacs. Si vous avez besoin d'indenter en dehors de l'indentation automatique, utilisez :

M - i

0 votes

El M+i L'astuce fonctionne avec 4 espaces. La tabulation me permet simplement de remettre en alignement à gauche quelque chose qui est déjà indenté. La deuxième fois, la tabulation le ramène à l'indentation de départ. Tout ce qui est aligné à gauche n'est pas modifié. Je suis dans un fichier Python, probablement que cela se produit comme un alignement automatique comme indiqué ici. Mais cette réponse utilise tab-stop-list ce qui n'est pas une bonne façon, il devrait être number-sequence à la place, voir cette réponse très votée .

0 votes

Il est recommandé d'utiliser la séquence de chiffres à la place : bash (setq-default indent-tabs-mode nil tab-width 4 tab-stop-list (number-sequence 4 200 4) )

0 votes

@questionto42, pourquoi ? Cela ne mettrait-il pas fin à la cohérence de l'indentation à 200+ ?

2voto

user1009285 Points 125

Les meilleures réponses n'ont pas fonctionné jusqu'à ce que j'écrive ceci dans le fichier .emacs :

(global-set-key (kbd "TAB") 'self-insert-command)

0 votes

Oui, cela fait de l'onglet un véritable onglet, que cela ait du sens ou non. L'onglet normal regarde si un onglet s'insère dans le code. Quelque chose qui est aligné à gauche ne sera pas indenté par la tabulation alors que dans le code, cette tabulation n'aurait aucun sens. C'est pour aider à l'alignement automatique, mais la plupart du temps, vous préférerez utiliser un éditeur de code et non emacs pour le formatage du code. Et puis, dans emacs, vous préférez souvent utiliser la tabulation dans tous les cas. Este Le code ici fait 8 espaces chaque fois que vous appuyez sur la tabulation. Combinez ceci avec cette réponse pour faire 4 espaces sur M+i .

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