Cambie el comportamiento de RET (con sangría eléctrica) para sangrar solo la nueva línea, no la anterior.

10

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-characters pregunta y responde cómo desactivar la sangría eléctrica al presionar RET . Todas las preguntas similares también parecen detenerse en "desactivar el modo de sangría eléctrica".

Fuera de la caja, RET sangra la línea anterior y la nueva línea. Para la nueva línea, esto significa que simplemente agrega suficiente espacio en blanco para que el cursor aparezca en la posición correcta.

Me gusta la segunda parte del comportamiento, pero no la primera, es decir, nunca quiero sangrar la línea anterior. ¿Hay alguna forma de cambiarlo para que me dé suficiente espacio en blanco en la nueva línea pero manteniendo intacta la línea anterior?

En realidad no necesito / quiero la mayor parte de la electricidad. Una solución que implica desactivar el modo de sangría eléctrica pero de alguna manera activar la función "agregar espacios en blanco para nuevas líneas" estaría bien para mí.

AnoE
fuente

Respuestas:

6

Creo que obtendrás lo que quieres con

(setq-default electric-indent-inhibit t)

Esto se entiende como una variable para los modos principales (en lugar de para los usuarios), pero también debería ocuparse de su caso de uso.

Stefan
fuente
Increíble gracias. Me topé con esta variable mientras la examinaba, electric.elpero la dejé de lado debido a su documentación: "Si no es nula, la reindentación no es apropiada para este búfer". Mi interpretación de eso fue que simplemente deshabilitaría el modo eléctrico para este búfer ...
AnoE
La clave es que habla de una nueva sangría, es decir, cambiar la sangría de una línea existente, en oposición a la sangría de una nueva línea.
Stefan
Me gusta el modo de sangría eléctrica cuando escribo una llave (para la línea actual). ¿Alguna forma de mantener este comportamiento mientras se evita que la línea anterior cambie cuando presiono enter?
Stanley Bak
1

En realidad no necesito / quiero la mayor parte de la electricidad. Una solución que implica desactivar el modo de sangría eléctrica pero de alguna manera activar la función "agregar espacios en blanco para nuevas líneas" estaría bien para mí.

Este enfoque puede ser de interés:

En los modos de programación, siempre quiero RETinvocar indent-new-comment-lineo su análogo específico de modo, que siempre tiene un enlace predeterminado de M-j. Estas funciones se encargan de la sangría y también comentan la continuación cuando estás dentro de una.

(defun my-coding-config ()
  ;; ...
  (local-set-key (kbd "RET") (key-binding (kbd "M-j")))
  (local-set-key (kbd "<S-return>") 'newline)
  )

(mapc
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(prog-mode-hook
   ;; plus anything not derived from prog-mode:
   inferior-emacs-lisp-mode-hook
   css-mode-hook
   python-mode-hook))

(add-hook 'js-mode-hook 'my-js-mode-hook)
(defun my-js-mode-hook ()
  ;; Fix M-j behaviour in block comments in js-mode
  (setq-local comment-multi-line t)
  (local-set-key [remap indent-new-comment-line] 'c-indent-new-comment-line))
phils
fuente