Modificare il comportamento di RET (con rientro elettrico) per rientrare solo nella nuova riga, non in quella precedente


10

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-characters chiede e risponde come disabilitare il rientro elettrico quando si preme RET . Tutte le domande simili sembrano anche fermarsi a "disabilitare la modalità rientro elettrico".

RET immediatamente pronto per il rientro della riga precedente e della nuova riga. Per la nuova linea questo significa che aggiunge semplicemente abbastanza spazio per far apparire il cursore nella posizione corretta.

Mi piace la seconda parte del comportamento, ma non la prima, ovvero non voglio mai che rientri nella riga precedente. C'è un modo per cambiarlo in modo che mi dia abbastanza spazio bianco sulla nuova linea ma mantenendo intatta la linea precedente?

In realtà non ho bisogno / voglio la maggior parte dell'elettricità. Una soluzione che prevede la disattivazione della modalità di rientro elettrico ma l'attivazione in qualche modo della funzione "Aggiungi spazi bianchi per nuove linee" andrebbe bene per me.

Risposte:


6

Penso che otterrai ciò che vuoi

(setq-default electric-indent-inhibit t)

Ciò era inteso come una variabile per le modalità principali (piuttosto che per gli utenti), ma dovrebbe occuparsi anche del tuo caso d'uso.


Fantastico grazie. Mi sono imbattuto in questa variabile mentre setacciavo electric.elma la mettevo da parte a causa della sua documentazione: "Se non nullo, la reindentazione non è appropriata per questo buffer". La mia interpretazione era che avrebbe semplicemente disabilitato la modalità elettrica per questo buffer ...
AnoE

La chiave è che si parla di re indentazione, cioè cambiare il rientro di una linea esistente, al contrario di rientro di una nuova linea.
Stefan

Mi piace la modalità rientro elettrico quando si digita una parentesi graffa (per la riga corrente). Qualche modo per mantenere questo comportamento mentre si impedisce la modifica della riga precedente quando si preme invio?
Stanley Bak,

1

In realtà non ho bisogno / voglio la maggior parte dell'elettricità. Una soluzione che prevede la disattivazione della modalità di rientro elettrico ma l'attivazione in qualche modo della funzione "Aggiungi spazi bianchi per nuove linee" andrebbe bene per me.

Questo approccio potrebbe essere di interesse:

Nella modalità di programmazione invariabilmente voglio RETinvocare indent-new-comment-lineo suo analogo modo specifico, che ha sempre un legame di predefinito M-j. Queste funzioni si occupano del rientro e commentano anche la continuazione quando ci sei dentro.

(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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.