Pour une raison quelconque, mes hooks de mode de script shell ne sont pas exécutés. Exemple dans mon .emacs:Crochet de mode de script shell Emacs
(add-hook 'shell-script-mode-hook (lambda() (rainbow-delimiters-mode 1)))
provoque les variables à définir, mais le mode n'est pas chargé pour les fichiers de script ouvert. Quelle est la bonne façon d'accrocher ici?
J'utilise le mode de script de shell par défaut (modeline dit par exemple Shell-script[bash]
). Dois-je hooker pour chaque type de shell individuellement (sh, bash, zsh)? Si oui pouvez-vous s'il vous plaît dites-moi comment?
Merci beaucoup!
EDIT3:
Il est avéré être en raison d'un conflit d'TextMate mode avec le squelette paire insertion en mode sh (j'ai essayé d'éviter le conflit en désactivant TextMate en mode sh, qui a ensuite J'ai enlevé complètement le mode textmate et j'ai utilisé le mode textmate-hook complètement et j'utilise maintenant la paire de squelette standard approche globalement
J'accepte la réponse de phils - sans lui je ne pourrais probablement pas pour déboguer cela par moi-même
EDIT2:
Merci à phils, je pense que son commentaire nous rapproche de la solution. Cependant, ce n'est pas un problème avec les délimiteurs arc-en-ciel. J'ai enlevé tous les sh-mode-hook excepté votre salut un message et redémarrer Emacs. Lorsque j'ouvre un fichier .sh, j'obtiens ceci:
Configurer le retrait pour le type de shell bash mettre en place la substance indentée Les variables d'indentation sont maintenant locales. Configuration de la mise en retrait pour la bash du type de shell Erreur de spécification de mode de fichier: (fonction vide nulle)
Remarquez le message "hello". La valeur de sh-mode-hook est: (nil (lambda nil (message "hello")))
Je pense que le problème est cette première valeur nulle - bien que je ne vois pas qu'elle serait définie n'importe où.
Si j'Eval ceci:
(setq sh-mode-hook t) (add-hook 'sh-mode-hook (lambda() (message "hello")))
Je vois le message bonjour, mais après le redémarrage (je l'ai mis ces lignes dans emacs), il est parti à nouveau (le zéro est à nouveau au-dessus de le crochet).
Une idée de ce qu'il faut faire pour avoir un crochet actif lors de l'installation?
EDIT1: J'ai essayé aussi:
(add-hook 'sh-mode-hook (lambda() (rainbow-delimiters-mode 1)))
avec le même résultat négatif - pas sûr si cela est pertinent si ...
Merci, cela a aidé à affiner le problème. Si vous avez le temps, jetez un coup d'œil à EDIT2 de la question originale, car elle est longue. Je vais essayer de nettoyer les choses pour la postérité si nous arrivons à trouver une solution. – user673592
Peut-être que vous pourriez 'M-x rgrep' vos fichiers' .el' pour 'sh-mode-hook' pour voir si quelque chose d'autre le dérange. Il semble que, à la suite de votre 'add-hook', quelque chose d'autre fasse quelque chose comme' (add-hook 'sh-mode-hook nil) '. – phils
Incidemment, je suis confus par votre '(setq sh-mode-hook t)' au lieu de '(setq sh-mode-hook nil)'. Cela ne semble pas causer de problèmes, mais que fait-il? – phils