Pregunta

No he logrado que Emacs cambie de 8 pestañas espaciales a 4 pestañas espaciales al presionar el botón PESTAÑA en buffers con el modo mayor text-mode.He añadido lo siguiente a mi .emacs:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

No importa cómo cambie mi .emacs archivo (o las variables locales de mi buffer) el PESTAÑA El botón siempre hace lo mismo.

  1. Si no hay texto arriba, sangría 8 espacios
  2. Si hay texto en la línea anterior, sangría al principio de la segunda palabra.

Por mucho que amo Emacs, esto se está volviendo molesto.¿Hay alguna manera de hacer que Emacs aplique al menos una sangría de 4 espacios cuando no hay texto en la línea anterior?

¿Fue útil?

Solución

(customize-variable (quote tab-stop-list))

o agregar lista de tabulaciones entrada a variables de conjunto personalizado en .emacs archivo:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))

Otros consejos

Respuesta corta:

El punto clave es decirle a emacs que inserte lo que quiera al aplicar sangría, esto se hace cambiando la función de línea de sangría.Es más fácil cambiarlo para insertar una pestaña y luego cambiar las pestañas en 4 espacios que cambiarlo para insertar 4 espacios.La siguiente configuración resolverá su problema:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

Explicación:

De Sangría controlada por el modo principal @ manual de emacs:

Una función importante de cada modo principal es personalizar la clave para sangrar correctamente para el lenguaje que se está editando.

[...]

La variable de función de la línea de sangría es la función que (y varios comandos, como cuando llaman a la región de sangría) para sangrar la línea actual.El comando sangría de la sangría no hace más que llamar a esta función.

[...]

El valor predeterminado es relativo al sangría para muchos modos.

Del manual de sangría relativa @ emacs:

Espacio relativo al sangría en el siguiente punto de sangría en la línea no blancas anteriores.

[...]

Si la línea Non-Blank anterior no tiene puntos de sangría más allá del punto de la columna en el que comienza, se realiza 'tab-tab-tab-stop'.

Simplemente cambie el valor de sangría-línea-función a la función insertar-pestaña y configure la inserción de pestañas como 4 espacios.

Actualizar: Desde Emacs 24.4:

tab-stop-list ahora se extiende implícitamente al infinito.Su valor predeterminado se cambia a nil lo que significa una tabulación cada tab-width columnas.

lo que significa que ya no es necesario configurar tab-stop-list de la forma que se muestra a continuación, ya que puede mantenerlo configurado en nil.

La respuesta original sigue...


Siempre me duele un poco ver cosas como (setq tab-stop-list 4 8 12 ................) cuando el number-sequence La función está ahí esperando a ser utilizada.

(setq tab-stop-list (number-sequence 4 200 4))

o

(defun my-generate-tab-stops (&optional width max)
  "Return a sequence suitable for `tab-stop-list'."
  (let* ((max-column (or max 200))
         (tab-width (or width tab-width))
         (count (/ max-column tab-width)))
    (number-sequence tab-width (* tab-width count) tab-width)))

(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))

Puede que le resulte más fácil configurar sus pestañas de la siguiente manera:

M-x customize-group

En el Customize group: Ingresar rápidamente indent.

Verá una pantalla donde puede configurar todas las opciones de sangría y configurarlas para la sesión actual o guardarlas para todas las sesiones futuras.

Si lo haces de esta manera querrás configurar un archivo de personalizaciones.

(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux") 
(setq c-basic-offset 4) 
(c-set-offset 'comment-intro 0)

esto funciona para el código C++ y el comentario interno también

Este problema no se debe a que falten tabulaciones;es que emacs tiene un método de tabulación (¿nuevo?) llamado sangría relativa que parece diseñado para alinear datos tabulares.La tecla TAB se asigna al método indent-for-tab-command, que llama a cualquier método en el que esté configurada la variable indent-line-function, que es un método de sangría relativa para el modo texto.No he descubierto una buena manera de anular la variable de función de línea de sangría (el enlace del modo de texto no funciona, así que tal vez se reinicie después de ejecutar los ganchos de modo), pero hay una forma sencilla de deshacerme de esto. El comportamiento es simplemente descartar el método de comando de intención de tabulación configurando TAB en el método más simple de tabulación a tabulación:

(definir clave texto-modo-mapa (kbd "TAB") 'tab-to-tab-stop)

Prueba esto:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

Eso hará que TAB siempre inserte un carácter TAB literal con tabulaciones cada 4 caracteres (pero solo en modo Texto).Si eso no es lo que estás pidiendo, describe el comportamiento que te gustaría ver.

Puede agregar estas líneas de código a su archivo .emacs.Agrega un gancho para que el modo texto use insertar pestaña en lugar de sangría relativa.

(custom-set-variables
 '(indent-line-function 'insert-tab)
 '(indent-tabs-mode t)
 '(tab-width 4))
(add-hook 'text-mode-hook
      (lambda() (setq indent-line-function 'insert-tab)))

Espero que ayude.

Simplemente cambiar el estilo con c-set-style fue suficiente para mí.

Agregue esto a su archivo .emacs:

Esto establecerá el ancho en el que se muestra una pestaña en 2 caracteres (cambie el número 2 a lo que desee)

(setq default-tab-width 2)

Para asegurarse de que emacs realmente use tabulaciones en lugar de espacios:

(global-set-key (kbd "TAB") 'self-insert-command)

Además, lo predeterminado para emacs al retroceder sobre una pestaña es convertirla en espacios y luego eliminar un espacio.Esto puede resultar molesto.Si desea que simplemente elimine la pestaña, puede hacer esto:

(setq c-backspace-function 'backward-delete-char)

¡Disfrutar!

Las personalizaciones pueden hacer sombra (setq tab width 4) entonces cualquiera usa setq-default o deja que Personalizar sepa lo que estás haciendo.También tuve problemas similares al OP y lo solucioné solo con esto, no fue necesario ajustarlo. tab-stop-list o cualquier insert funciones:

(custom-set-variables
 '(tab-width 4 't)
 )

Me resultó útil agregar esto inmediatamente después (un consejo de emacsWiki):

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

Las mejores respuestas no funcionaron hasta que escribí esto en el archivo .emacs:

(global-set-key (kbd "TAB") 'self-insert-command)

Esta es la única solución que evita que se inserte una pestaña, sin una secuencia o conversión de pestañas a espacios.Ambos parecían adecuados, pero un desperdicio:

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

Tenga en cuenta que quote necesita dos números para funcionar (¡pero no más!).

Además, en la mayoría de los modos principales (Python por ejemplo), la sangría es automática en Emacs.Si necesita aplicar una sangría fuera de la sangría automática, utilice:

METRO-i

Has probado

(setq  tab-width  4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)

Por cierto, para modo C, Añado (setq-default c-basic-offset 4) a .emacs.Ver http://www.emacswiki.org/emacs/IndentingC para detalles.

Desde mi archivo de inicio, diferente porque quería espacios en lugar de pestañas:

(add-hook 'sql-mode-hook
          (lambda ()
             (progn
               (setq-default tab-width 4)
               (setq indent-tabs-mode nil)
               (setq indent-line-function 'tab-to-tab-stop) 
               (modify-syntax-entry ?_ "w")       ; now '_' is not considered a word-delimiter
               (modify-syntax-entry ?- "w")       ; now '-' is not considered a word-delimiter 
               )))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top