Pregunta:
Cuando escribo código Python, personalmente prefiero sangrar con 4 espacios en lugar de una tabulación. Sin embargo, en mi trabajo diario trabajo con una base de código que solo usa pestañas.
Cuando abro uno de estos archivos en emacs, las pestañas muestran ocho espacios de ancho. He intentado agregar ambos (setq-default tab-width 4)
y (setq tab-width 4)
a mi archivo de inicio, pero ninguno de estos parece tener ningún efecto sobre este problema. He utilizado whitespace-mode
para confirmar que, de hecho, lo que estoy viendo es una pestaña y no dos, y que de hecho tienen ocho espacios de ancho. Cuando verifico el valor de la variable tab-width
de tab-width
de cualquier búfer en el que tengo el problema, aparece el siguiente mensaje:
tab-width is a variable defined in `C source code'.
Its value is 8
Local in buffer <whateverbuffer>; global value is 4
Sé que quiero que Its value
sea 4 en lugar de ocho, pero no he tenido suerte al establecerlo. Además, en la documentación dice de tab-width
: Automatically becomes buffer-local when set
… Tengo la sensación de que mi problema proviene de esto, pero no entiendo muy bien lo que esto significa. ¿Alguna sugerencia? ¡Gracias!
Respuesta:
La primera línea al habilitar python-mode
es (set (make-local-variable 'tab-width) 8)
. Debido tab-width
es una variable local del búfer, sería necesario establecer un nuevo valor después del código anterior. La forma más común de hacer esto es con un gancho de modo mayor, en este caso el python-mode-hook
.
También hay una variable llamada python-indent-offset
, que se usa cuando la función python-indent-guess-indent-offset
no puede determinar qué sangría usar. Eso debe establecerse fuera del gancho del modo principal para que su valor personalizado esté disponible cuando python-mode
inicialice por primera vez.
(setq python-indent-offset 4)
(defun python-custom-settings ()
(setq tab-width 4))
(add-hook 'python-mode-hook 'python-custom-settings)