Alterar o comportamento do RET (com recuo elétrico) para recuar apenas a nova linha, não a anterior

9

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-characters pergunta e responde como desativar o recuo elétrico ao pressionar RET . Todas as perguntas semelhantes também parecem parar em "desativar o modo de indentação elétrica".

Pronto para uso, o RET recua a linha anterior e a nova linha. Para a nova linha, isso significa que simplesmente adiciona espaço em branco suficiente para fazer o cursor aparecer na posição correta.

Gosto da segunda parte do comportamento, mas não da primeira, ou seja, nunca quero que ele recue a linha anterior. Existe uma maneira de alterá-lo para que me dê espaço em branco suficiente na nova linha, mas mantendo a linha anterior intocada?

Na verdade, eu não preciso / quero a maior parte da eletricidade. Uma solução que envolve desativar o modo de indentação elétrica, mas de alguma forma ativar o recurso "adicionar espaço em branco para novas linhas" seria bom para mim.

AnoE
fonte

Respostas:

6

Eu acho que você vai conseguir o que quer com

(setq-default electric-indent-inhibit t)

Isso foi concebido como uma variável para os modos principais (em vez de para os usuários), mas também deve cuidar do seu caso de uso.

Stefan
fonte
Perfeito, obrigado. Eu me deparei com essa variável enquanto vasculhava, electric.elmas a deixei de lado devido à documentação: "Se não for nula, a reindentação não é apropriada para esse buffer". Minha interpretação disso era que ele simplesmente desabilitaria o modo elétrico para esse buffer ... #
307 AnoE
A chave é que ele fala sobre re recuo, ou seja, mudando o recuo de uma linha existente, em oposição ao recuo de uma nova linha.
21416 Stefan
Eu gosto do modo de indentação elétrica quando digito uma chave (para a linha atual). Alguma maneira de manter esse comportamento e impedir que a linha anterior seja alterada quando pressiono enter?
Stanley Bak
1

Na verdade, eu não preciso / quero a maior parte da eletricidade. Uma solução que envolve desativar o modo de indentação elétrica, mas de alguma forma ativar o recurso "adicionar espaço em branco para novas linhas" seria bom para mim.

Essa abordagem pode ser interessante:

Nos modos de programação, eu invariavelmente quero RETchamar indent-new-comment-lineou seu análogo específico de modo, que sempre possui uma ligação padrão de M-j. Essas funções cuidam do recuo e também comentam a continuação quando você está dentro de um.

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