Retrait d'Emacs à l'aide des onglets

8

Existe-t-il un moyen de faire en sorte qu'Emacs indente le code en utilisant uniquement des tabulations globalement et non des espaces Je connais la commande tabify. Je préférerais l'indentation automatisée pour utiliser des tabulations plutôt qu'un mélange d'onglets et d'espaces comme le fait la configuration par défaut.

lorefnon
la source

Réponses:

7

Eh bien, pour mettre en retrait avec des onglets, vous voudrez vous assurer que indent-tabs-modec'est t(qui est la valeur par défaut). Mais pour obtenir uniquement des onglets, vous devez ajuster le mode qui effectue l'indentation de telle sorte que chaque ligne soit indentée par un multiple de votre tab-width(par défaut 8). Par exemple, en mode C, vous pouvez essayer de définir c-basic-offset8.

Ou, vous pouvez réduire votre tab-widthvaleur à une valeur plus petite, afin qu'Emacs n'ait pas besoin d'utiliser des espaces pour atteindre chaque niveau d'indentation. Mais si vous faites cela, tout le monde qui doit travailler sur votre code (et utilise les tabulations standard à 8 caractères) sera ennuyé.

Je vous exhorte à reconsidérer. Personnellement, je trouve ennuyeux de travailler sur du code en retrait avec des tabulations, surtout si elles ne semblent pas être 8 tabulations d'espace. (Le pire est le code où certaines lignes utilisent des espaces, certaines lignes utilisent des tabulations, et ce n'est clairement pas 8 tabulations d'espace.) Faites-nous tous une faveur et juste (setq indent-tabs-mode nil).

cjm
la source
Je voudrais marquer cette question pour la deuxième largeur de tabulation du paramètre paragragh et le commentaire ne mélange pas les tabulations et les espaces. Mais si la largeur de votre onglet est définie, l'édition de l'indentation est beaucoup plus facile avec un onglet pour chaque niveau plutôt que plusieurs espaces
user151019
Je pense que votre troisième paragraphe est généralement utile, mais souvent nous n'arrivons pas à contrôler le style de retrait de l'auteur original, par exemple, à qui nous soumettons des demandes de pull / merge. J'ai mes préférences, elles ont les leurs. Je pense qu'il est respectueux d'utiliser leur style d'indentation à un niveau raisonnable, donc parfois le choix n'est pas le nôtre .
r2evans
7

Emacs est livré avec plusieurs styles prédéfinis pour l'indentation C, ou vous pouvez écrire le vôtre si aucun ne correspond à vos besoins. Parmi les styles standard , il semble que vous cherchiez linux(le style utilisé dans la source du noyau Linux), qui a des retraits de 8 colonnes et utilise des tabulations de largeur 8.

Vous pouvez faire de ces paramètres votre style par défaut pour C en le mettant dans votre .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)

Assurez-vous toutefois de ne pas utiliser ces paramètres lorsque vous collaborez avec d'autres personnes ayant des préférences différentes. En particulier, l'utilisation d'onglets vous fera des ennemis. Si un fichier particulier doit être conservé dans un style particulier, vous pouvez utiliser des variables de fichier pour vous assurer que tous ceux qui éditent le fichier dans Emacs utilisent les mêmes paramètres:

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

Si vous avez un projet entier avec des fichiers C de même retrait, utilisez des variables de répertoire plutôt que de polluer chaque fichier. Créez un fichier appelé .dir-locals.elavec un contenu comme celui-ci:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))
Gilles 'SO- arrête d'être méchant'
la source
1

Les tabulations m'ennuient, mais j'ai dû trouver comment faire en sorte qu'emacs n'utilise que des tabulations pour indenter afin que je puisse travailler sur le code de quelqu'un d'autre. Voici ce qui a fonctionné pour moi:

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

J'ai remarqué qu'avant de jouer avec quoi que ce soit, lorsque j'appuyais sur la touche de tabulation, il était automatiquement en retrait de 2 colonnes. La définition de "tab-width" pour correspondre au décalage de 2 colonnes a permis à emacs d'utiliser des tabulations lors du formatage automatique. Je travaillais en mode nxml, mais je pense que cela devrait fonctionner pour n'importe quel mode.

Upgradingdave
la source
Agréable. Cela m'a aussi dérangé. Il n'est pas intuitif de devoir définir la largeur de tabulation pour correspondre au décalage de colonne. Bon travail. J'ai utilisé cette idée en mode c ++
Sean Lynch