Ubah perilaku RET (dengan indentasi listrik) menjadi hanya indentasi baris baru, bukan yang sebelumnya

10

/programming/27077770/how-do-i-disable-electric-indent-on-ret-but-still-keep-other-electric-characters bertanya dan menjawab cara menonaktifkan indentasi listrik saat menekan RET . Semua pertanyaan serupa juga tampaknya berhenti pada "nonaktifkan mode indentasi listrik".

Out-of-the-box, RET indentasi baris sebelumnya dan baris baru. Untuk baris baru, ini berarti bahwa ia hanya menambahkan spasi yang cukup untuk membuat kursor muncul di posisi yang benar.

Saya suka bagian kedua dari perilaku tetapi bukan yang pertama, yaitu saya tidak pernah ingin membuat indentasi pada baris sebelumnya. Apakah ada cara untuk mengubahnya sehingga memberi saya ruang kosong yang cukup pada baris baru tetapi menjaga baris sebelumnya tidak tersentuh?

Saya sebenarnya tidak membutuhkan / menginginkan sebagian besar listrik. Solusi yang melibatkan mematikan listrik-indent-mode tetapi entah bagaimana mengaktifkan fitur "tambahkan spasi untuk baris baru" akan baik-baik saja dengan saya.

AnoE
sumber

Jawaban:

6

Saya pikir Anda akan mendapatkan apa yang Anda inginkan

(setq-default electric-indent-inhibit t)

Ini dimaksudkan sebagai variabel untuk mode-utama (bukan untuk pengguna), tetapi harus menangani kasus penggunaan Anda juga.

Stefan
sumber
Luarbiasa, terimakasih. Saya menemukan variabel ini ketika memilah-milah electric.eltetapi menyisihkannya karena dokumentasinya: "Jika tidak ada, reindentasi tidak sesuai untuk buffer ini." Interpretasi saya tentang itu adalah bahwa itu hanya akan menonaktifkan mode-listrik untuk buffer ini ...
AnoE
Kuncinya adalah ia berbicara tentang indentasi ulang , yaitu mengubah indentasi dari baris yang ada, yang bertentangan dengan indentasi dari baris baru.
Stefan
Saya suka mode indentasi listrik ketika saya mengetik kurung kurawal (untuk saluran saat ini). Adakah cara untuk menjaga perilaku ini sambil mencegah baris sebelumnya berubah ketika saya menekan enter?
Stanley Bak
1

Saya sebenarnya tidak membutuhkan / menginginkan sebagian besar listrik. Solusi yang melibatkan mematikan listrik-indent-mode tetapi entah bagaimana mengaktifkan fitur "tambahkan spasi untuk baris baru" akan baik-baik saja dengan saya.

Pendekatan ini mungkin menarik:

Dalam mode pemrograman saya selalu ingin RETmemohon indent-new-comment-lineatau analog mode khusus, yang selalu memiliki ikatan standar M-j. Fungsi-fungsi ini menangani lekukan, dan juga komentar kelanjutan ketika Anda berada di dalam satu.

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