Como han indicado otros, un problema con el File Local Variables approach es que necesita modificar el archivo, y eso no es ideal si necesita mantener esas declaraciones fuera del control de la versión.
Si desea que las variables que se aplican a todos archivos en un directorio dado, entonces Directorio variables locales es obviamente el camino a seguir, y se puede poner en práctica que, ya sea con un archivo .dir-locals.el
, o llamando (dir-locals-set-directory-class)
:
prefiero la clase directorio de acercarse a mí, y yo era delgada Que es una lástima que no haya un enfoque análogo para las variables locales de archivos, pero encontré que el código de clase de directorio funciona perfectamente con los archivos, y el único problema es que dir-locals-set-directory-class
llama al file-name-as-directory
en su argumento, lo que impide que sea emparejado, debido a la barra final.
Por lo tanto, la siguiente es una forma de configurar las variables locales del directorio para un único archivo, sin modificar el archivo ni afectar a otros archivos en el mismo directorio principal.
(defun my-file-locals-set-directory-class (file class &optional mtime)
"Enable 'directory local' classes for individual files,
by allowing non-directories in `dir-locals-directory-cache'.
Adapted from `dir-locals-set-directory-class'."
(setq file (expand-file-name file))
(unless (assq class dir-locals-class-alist)
(error "No such class `%s'" (symbol-name class)))
(push (list file class mtime) dir-locals-directory-cache))
(dir-locals-set-class-variables
'my-javascript-class
'((nil . ((js-indent-level . 2)
(indent-tabs-mode . nil)))))
(my-file-locals-set-directory-class
"path/to/the/file.js" 'my-javascript-class)
Esta debería ser la respuesta correcta ... puntos de bonificación si puede haber una función que podemos agregar a nuestros .emacs que hace estos 2 pasos en 1! –
@AsfandYarQazi Siempre puede personalizar js-indent-level (abra un archivo .js, luego M-x customize-variable js-indent-level ). Esto le permitirá establecer un valor predeterminado y guardarlo para sesiones futuras. La pregunta era sobre cambiar la sangría sobre la marcha de un buffer específico. –
Lo que quiero decir es que sería increíble tener una única función que pueda invocar con M-x que haga una variable buffer-local, y cambie su valor a algo. Así como 'M-x set-variable-locally' –