indentation – ¿Cómo sangrar el código SQL solo 4 espacios, sin alineación, etc.?

Pregunta:

El modo SQL tiene algunas cosas interesantes configuradas para sangrar con palabras clave alineadas y demás. Normalmente, creo que es genial. El problema es que en mi nuevo trabajo, las personas que escribieron nuestras montañas de sql no tenían esta configuración y solo sangraron los espacios de sql 4.

Podría intimidarlos a todos para que se cambien a emacs, pero eso es más un proyecto a largo plazo. A corto plazo, quiero hacer que emacs indent sql de la forma estúpida que lo hacen los editores menores: 4 espacios, más o menos ignorantes del contexto. ¿Cómo haría esto?

EDITAR:

Una solución (setq indent-line-function 'tab-to-tab-stop) es crear un gancho de modo con (setq indent-line-function 'tab-to-tab-stop) . Desafortunadamente, esto interactúa mal con indent-tabs-mode nil y la falta de una función de retroceso personalizada. Lo que realmente me gustaría es algo sencillo que permita la sangría de rebote en unos pocos niveles.

EDIT2:

En realidad ya no necesito esto. Acabo de comenzar a sangrar mi propio SQL correctamente, y todos los demás parecen apreciarlo.

Respuesta:

No estoy seguro de entender exactamente lo que quiere decir con "sangría de rebote en unos pocos niveles". ¿Le conviene algo como lo siguiente?

Funciona más o menos como en Python: la primera vez que aplica sangría, avanza 4 columnas más allá de la línea anterior. Si sigue presionando TAB , disminuye el nivel de sangría hasta llegar a la primera columna (en ese punto vuelve al nivel más sangrado)

(defun my-indent ()
  (let ((last-indent (if (> (line-number-at-pos) 1)
                         (save-excursion
                           (previous-line)
                           (back-to-indentation)
                           (current-column))
                       0)))
    (save-excursion
      (back-to-indentation)
      (if (and (eq last-command this-command)
               (> (point) (line-beginning-position)))
          (delete-region (max (line-beginning-position) (- (point) 4)) (point))
        (while (< (current-column) (+ 4 last-indent))
          (insert " "))))
    (if (< (point) (save-excursion (back-to-indentation) (point)))
        (back-to-indentation))))


(defun my-sql-mode-hook ()
  (setq indent-line-function 'my-indent))

(add-hook 'sql-mode-hook 'my-sql-mode-hook)

Leave a Comment

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

Scroll to Top

web tasarım