2009-06-18 12 views
3

Un de mes amis envisage de passer à Emacs à partir de TextMate. Il est habitué au mode d'édition HTML par défaut de TextMate qui comporte des tabulations à 4 espaces et insère des caractères de tabulation (c'est-à-dire qu'il ne crée pas d'indentation automatique par défaut). Il permet également l'achèvement des balises HTML ouvertes avec "Cmd-Shift->". Des idées?Comment configurer Emacs html-mode pour qu'il se comporte comme le paquet HTML par défaut de TextMate?

+0

Ack, J'étais inexact ci-dessus. Je ne voulais pas dire des caractères de tabulation réels, mais plutôt 4 espaces à la place d'un caractère de tabulation. Toutes mes excuses pour cela. –

Répondre

9

Je pense que ces paramètres devraient faire l'affaire:

(defun my-html-mode-hook() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (define-key html-mode-map (kbd "<tab>") 'my-insert-tab) 
    (define-key html-mode-map (kbd "C->") 'sgml-close-tag)) 

(defun my-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 

(add-hook 'html-mode-hook 'my-html-mode-hook) 

Une explication des paramètres dans 'my-html-mode-hook est la suivante:

  • définir la largeur de l'onglet à 4
  • onglets de force à inséré (par opposition aux espaces)
  • force la touche TAB pour insérer une tabulation (par défaut, elle est liée à l'indentation, pas seulement à l'insertion) des onglets
  • 'sgml-close-tag est la commande qui insère une balise fermante pour vous, et ce paramètre vous obtient le raccourci clavier que vous voulez

Je vais avoir un peu d'un gel du cerveau et ne pouvait pas comprendre simple façon d'avoir la clé TAB insérer un caractère TAB, alors j'ai écrit le mien. Je ne sais pas pourquoi une liaison à 'self-insert-command n'a pas fonctionné (c'est ce que les clés normales sont liées).

La dernière ligne ajoute simplement la fonction d'installation au 'html-mode-hook. Les raccourcis clavier n'ont vraiment besoin d'être exécutés qu'une seule fois (contrairement à chaque fois que le mode html est activé), mais c'est un peu plus facile à lire que d'utiliser 'eval-after-load. Son utilisation est laissée comme un exercice au lecteur.

+1

Je suis ancré dans l'utilisation de ctrl-z et meta-z pour faire défiler vers le haut/défiler/bas des lignes simples. (C'était standard, je pense dans emacs comme dans les années 80 ou quelque chose.) J'ai dû ajouter cela à mon custom.el dans XEmacs 21.5.29, mais j'ai ensuite trouvé que la personnalisation était surchargée par le mode majeur HTML. Le mécanisme de Trey était exactement ce dont j'avais besoin pour le faire fonctionner à nouveau. Bravo Trey. Il n'y a rien comme si la fenêtre disparaissait pendant que vous défiliez pour détruire votre flux ... –

2

Je ne connais pas les modes HTML de emacs spécifiquement, mais je peux répondre au sujet des modifications générales:

  • par défaut, Emacs n'a pas autoindent, donc rien à faire ici. Emacs préserve les caractères de tabulation, à moins que vous ne leur demandiez expressément de les modifier (consultez tabify et untabify). Leur largeur est déterminée par la variable buffer-local tab-width. M-x set-variable, (setq...), personnaliser à volonté.

  • vous devriez être en mesure d'obtenir le comportement que vous voulez avec la touche de tabulation en mettant à indent-line-functiontab-to-tab-stop, la mise en tab-stop-list-(4 8 12 16...) et indent-tabs-mode à t.

Le paramètre indent-tabs-mode permet à Emacs d'insérer des caractères de tabulation lors de l'indentation. Le tab-to-tab-stop est une forme d'indentation qui ne va qu'à des positions spécifiques dans la ligne, que nous définissons pour correspondre au comportement attendu des caractères de tabulation en réglant tab-stop-list aux multiples de 4.

À propos de l'achèvement, la seule chose que mon muscle la mémoire me dit est "C-c C-e", mais je ne me souviens pas avec certitude quel mode majeur il est censé aller avec.Le plus proche que je vois dans la liste est sgml-close-tag, lié à C-c /

Un peu de politique: ne pas utiliser les caractères de tabulation, surtout si vous utilisez des largeurs pas égal à 8. Il en résulte que des résultats imprévisibles

Questions connexes