2015-04-01 1 views
0

J'ai plusieurs scripts bash qui génèrent du SQL. 99% du temps, je veux qu'emacs l'édite en mode sql. J'ai inséré ceci dans mon fichier .emacs:Mode de configuration dans emacs

(add-to-list 'auto-mode-alist '("\\.sql\\.sh\\'" . sql-mode))

je reçois le bon mode si j'ouvrir un fichier non existant comme « foobar.sql.sh » dans emacs. Cependant, si j'ouvre un fichier existant qui a #!/bin/bash comme première ligne, j'obtiens le shell-script-mode. Comment puis-je le changer pour avoir le mode sql?

+1

Il se peut que magic-mode-alist prenne la priorité sur l'auto-mode-alist – PuercoPop

Répondre

0

Si vous vérifiez votre variable interpreter-mode-alist, vous trouverez une entrée comme ("r?bash2?" . sh-mode) ou ("bash" . sh-mode) selon la version d'emacs que vous utilisez. Ce paramètre est prioritaire sur magic-mode-alist et auto-mode-alist.

Je suggère la suppression de cette entrée de interpreter-mode-alist, se débarrasser de la nouvelle entrée vous avez ajouté à auto-mode-alist, et en ajoutant deux nouvelles entrées à magic-mode-alist place:

(add-to-list 'magic-mode-alist '("r?bash2?" . sh-mode)) 
(add-to-list 'magic-mode-alist 
    '((lambda() 
     (string-match "\\.sql\\.sh$" (buffer-file-name))) . sql-mode)) 

Assurez-vous de les ajouter dans cet ordre si la seconde on est devant le premier dans la liste résultante (et oui, il y a d'autres façons de le faire mais je le montre de cette façon pour plus de clarté). La deuxième entrée, qui sera essayée en premier, vérifie le nom du tampon pour voir s'il correspond à un suffixe .sql.sh et définit sql-mode si c'est le cas. Si cette correspondance échoue, l'autre entrée vérifie le début du tampon pour le même motif recherché par interpreter-mode-alist et définit sh-mode s'il correspond.

+0

Fonctionne pour moi sur emacs 22.1.1. J'ai supprimé l'entrée en utilisant '(delete '(" bash ".sh-mode) interpréter-mode-alist) – dan