Ändern Sie das Verhalten von RET (mit elektrischem Einzug) so, dass nur die neue Zeile eingerückt wird, nicht die vorherige

9

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-characters fragt und antwortet, wie der elektrische Einzug beim Drücken von RET deaktiviert werden kann . Alle ähnlichen Fragen scheinen auch beim "Deaktivieren des elektrischen Einrückungsmodus" zu enden.

Standardmäßig rückt RET die vorherige und die neue Zeile ein. Für die neue Zeile bedeutet dies, dass einfach genug Leerzeichen hinzugefügt werden, damit der Cursor an der richtigen Position angezeigt wird.

Ich mag den zweiten Teil des Verhaltens, aber nicht den ersten, dh ich möchte nie, dass die vorherige Zeile eingerückt wird. Gibt es eine Möglichkeit, dies zu ändern, damit ich in der neuen Zeile genügend Leerzeichen habe, die vorherige Zeile jedoch unberührt bleibt?

Ich brauche / will eigentlich nicht den größten Teil des Stroms. Eine Lösung, bei der der elektrische Einrückungsmodus ausgeschaltet, aber irgendwie die Funktion "Leerzeichen für neue Zeilen hinzufügen" aktiviert wird, ist für mich in Ordnung.

AnoE
quelle

Antworten:

6

Ich denke, Sie werden bekommen, was Sie wollen

(setq-default electric-indent-inhibit t)

Dies war als Variable für Hauptmodi gedacht (und nicht für Benutzer), sollte sich aber auch um Ihren Anwendungsfall kümmern.

Stefan
quelle
Großartig, danke. Ich bin beim Durchsuchen auf diese Variable gestoßen, habe sie electric.elaber aufgrund ihrer Dokumentation beiseite gelegt: "Wenn sie nicht Null ist, ist eine erneute Identifizierung für diesen Puffer nicht geeignet." Meine Interpretation davon war, dass es einfach den elektrischen Modus für diesen Puffer deaktivieren würde ...
AnoE
Der Schlüssel ist, dass es sich um ein erneutes Einrücken handelt, dh um das Ändern des Einrückens einer vorhandenen Zeile im Gegensatz zum Einrücken einer neuen Zeile.
Stefan
Ich mag den elektrischen Einrückungsmodus, wenn ich eine geschweifte Klammer (für die aktuelle Linie) tippe. Gibt es eine Möglichkeit, dieses Verhalten beizubehalten und gleichzeitig zu verhindern, dass sich die vorherige Zeile ändert, wenn ich die Eingabetaste drücke?
Stanley Bak
1

Ich brauche / will eigentlich nicht den größten Teil des Stroms. Eine Lösung, bei der der elektrische Einrückungsmodus ausgeschaltet, aber irgendwie die Funktion "Leerzeichen für neue Zeilen hinzufügen" aktiviert wird, ist für mich in Ordnung.

Dieser Ansatz könnte von Interesse sein:

In Programmiermodi möchte ich immer das RETmodusspezifische indent-new-comment-lineAnalog aufrufen , das immer eine Standardbindung von hat M-j. Diese Funktionen kümmern sich um das Einrücken und kommentieren auch die Fortsetzung, wenn Sie sich in einer befinden.

(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
quelle