2017-08-16 6 views
1

J'ai un projet A qui nécessite 2 espaces d'indentation, mais il intègre un autre projet dans un sous-dossier B qui utilise 4 espaces.variables de répertoire emacs excluant un sous-répertoire particulier

je suit dans A/.dir-locals.el:

((c-mode . ((indent-tabs-mode . nil) 
      (c-basic-offset . 2)))) 

... et il applique bien à tous les fichiers dans le répertoire c A.

Question: Puis-je dans ce Le même fichier dir-locals.el exclut le sous-dossier B de l'indentation de 2 espaces?

Je pourrais créer un fichier A/B/.dir-locals.el avec les paramètres pour B, mais comme c'est actuellement l'exception A, je préférerais conserver la configuration dans A/.dir -locals.el

Répondre

1

Je cite le manuel:

Here’s an example of a ‘.dir-locals.el’ file: 

    ((nil . ((indent-tabs-mode . t) 
       (fill-column . 80))) 
     (c-mode . ((c-file-style . "BSD") 
       (subdirs . nil))) 
     ("src/imported" 
     . ((nil . ((change-log-default-name 
        . "ChangeLog.local")))))) 

This sets ‘indent-tabs-mode’ and ‘fill-column’ for any file in the 
directory tree, and the indentation style for any C source file. The 
special ‘subdirs’ element is not a variable, but a special keyword which 
indicates that the C mode settings are only to be applied in the current 
directory, not in any subdirectories. Finally, it specifies a different 
‘ChangeLog’ file name for any file in the ‘src/imported’ subdirectory. 

- C-hig(emacs)Directory VariablesRET

Donc, dans votre cas, vous recherchez peut-être quelque chose comme:

((c-mode . ((indent-tabs-mode . nil) 
      (c-basic-offset . 2))) 
("B" . ((c-mode . ((c-basic-offset . 4)))))) 
1

Vous ne pouvez pas spécifier de chemins dans les fichiers .dir-locals. Je pense que .editorconfig est une meilleure solution quand même. Parce qu'il vous permet de partager des styles de codage avec les utilisateurs d'autres éditeurs. Emacs a une belle package pour appliquer les paramètres d'un fichier .editorconfig.

place dans votre répertoire A:

# top-most EditorConfig file 

root = true 
# only match files in root folder 
[/*.c] 
indent_style = space 
indent_size = 2