indentation – Problemas para ajustar el ancho de la pestaña

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)

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım