Sangrado de Emacs usando pestañas

8

¿Hay alguna manera de hacer un código de sangría de Emacs usando solo pestañas globalmente y no espacios? Sé del comando tabify. Preferiría la sangría automatizada para usar pestañas en lugar de una mezcla de pestañas y espacios como lo hace la configuración predeterminada.

lorefnon
fuente

Respuestas:

7

Bueno, para sangrar con pestañas, querrás asegurarte de que indent-tabs-modesea t(que es el valor predeterminado). Pero para obtener solo pestañas, debe ajustar el modo que está haciendo la sangría de modo que cada línea esté sangrada por un múltiplo de su tab-width(valor predeterminado 8). Por ejemplo, en el modo C, puede intentar establecerlo c-basic-offseten 8.

O bien, puede reducir su tab-widthvalor a un valor menor, de modo que Emacs no necesite usar espacios para alcanzar cada nivel de sangría. Pero si haces eso, todos los que tengan que trabajar en tu código (y usen las tabulaciones estándar de 8 caracteres) se molestarán.

Te insto a que lo reconsideres. Personalmente, me resulta molesto trabajar en código sangrado con pestañas, especialmente si no parecen ser 8 pestañas espaciales. (Lo peor es el código donde algunas líneas usan espacios, algunas líneas usan pestañas, y claramente no son 8 pestañas espaciales). Haznos un favor a todos y solo (setq indent-tabs-mode nil).

cjm
fuente
Marcaría esta pregunta para el segundo ancho de pestaña de configuración de paragragh y el comentario no mezcla pestañas y espacios. Pero si el ancho de su pestaña está configurado, la edición de sangría es mucho más fácil con una pestaña para cada nivel en lugar de varios espacios
user151019
Creo que su tercer párrafo es generalmente útil, pero a menudo no podemos controlar el estilo de sangría del autor original, por ejemplo, a quien enviamos solicitudes de extracción / fusión. Tengo mis preferencias, ellas tienen las suyas. Creo que es respetuoso usar su estilo de sangría a un nivel razonable, por lo que ocasionalmente la elección no es nuestra .
r2evans
7

Emacs viene con varios estilos predefinidos para la sangría en C, o puede escribir el suyo si ninguno satisface sus necesidades. Entre los estilos estándar , parece que está buscando linux(el estilo utilizado en la fuente del kernel de Linux), que tiene sangrías de 8 columnas y usa caracteres de tabulación de ancho 8.

Puede hacer que esta configuración sea su estilo predeterminado para C poniendo esto en su .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Sin embargo, asegúrese de no utilizar esta configuración cuando colabore con otras personas con diferentes preferencias. En particular, el uso de pestañas te hará eneminas. Si un archivo en particular debe mantenerse en un estilo particular, puede usar variables de archivo para asegurarse de que todos los que editan el archivo en Emacs usen la misma configuración:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Si tiene un proyecto completo con archivos C con sangría similar, use variables de directorio en lugar de contaminar cada archivo. Cree un archivo llamado .dir-locals.elcon contenido como el siguiente:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))
Gilles 'SO- deja de ser malvado'
fuente
1

Las pestañas me molestan, pero tuve que descubrir cómo hacer que emacs use solo pestañas para sangrar para poder trabajar en el código de otra persona. Esto es lo que funcionó para mí:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Me di cuenta de que antes de jugar con cualquier cosa, cuando presioné la tecla de tabulación, se sangraba automáticamente por 2 columnas. Establecer "ancho de tabulación" para que coincida con el desplazamiento de 2 columnas permitió a emacs usar tabulaciones al formatear automáticamente. Estaba trabajando en modo nxml, pero creo que esto debería funcionar para cualquier modo.

Updadingdave
fuente
Agradable. Esto también me ha molestado. No es intuitivo tener que establecer el ancho de la pestaña para que coincida con el desplazamiento de la columna. Buen trabajo. Usé esta idea en c ++ - modo
Sean Lynch