Pertanyaan Fungsi Indentasi Emacs


Saya bekerja di cc-mode di Emacs dan saya menemukan lekukan itu sangat menjengkelkan.

Sebagai pengguna VIM, saya cukup terbiasa dengan indentasi yang lebih lama, serta memiliki kemewahan untuk memukul tab ke tab sebanyak yang saya inginkan.

Di Emacs, TAB saya dipetakan goto-line. Pertama, fungsi mana yang dirancang untuk indentasi baris saat ini (atau apa setelahnya)? indent-region menjengkelkan karena Anda perlu menyoroti wilayah tersebut.

Kedua, apa cara terbaik untuk memperbaiki indentasi?

Terima kasih,


4
2018-03-22 20:55


asal


Jawaban:


Anda dapat melihat jenis tabbing apa yang digunakan saat ini M-x describe-variable RET c-indentation-style (tetapi sebagai dokumentasi menyatakan, jangan mengatur variabel ini secara langsung, melainkan gunakan M-x c-set-style).

Variabel c-basic-offset adalah apa yang mengontrol tabbing masuk cc-mode dan standarnya adalah set-from-style yang berarti tabbing akan diwariskan dari gaya C yang telah Anda tetapkan M-x set-c-style yang akan membiarkan Anda memilih dari satu set gaya bawaan (lihat di bawah) atau Anda bisa buat gaya Anda sendiri. Anda dapat melihat bagaimana gaya didefinisikan dengan M-x describe-variable RET c-style-alist lalu Anda dapat menggunakan salah satunya sebagai templat M-x c-add-style.

  • gnu - Gaya pengkodean yang diberkati oleh Yayasan Perangkat Lunak Bebas untuk kode C dalam program GNU.
  • k & r - Gaya klasik Kernighan dan Ritchie untuk kode C.
  • bsd - Juga dikenal sebagai "gaya Allman" setelah Eric Allman.
  • pandai besi - Dipopulerkan oleh contoh yang datang dengan Whitesmith C, kompiler C komersial awal.
  • stroustrup - Gaya Stroustrup klasik untuk kode C ++.
  • ellemtel - Standar pengkodean C ++ populer seperti yang didefinisikan oleh "Pemrograman dalam C ++, Aturan dan Rekomendasi," Erik Nyquist dan Mats Henricson, Ellemtel ^ 1.
  • linux - Standar pengkodean C untuk Linux (kernel).
  • python - Standar pengkodean C untuk modul ekstensi Python ^ 2.
  • Jawa - Gaya untuk mengedit kode Java. Perhatikan bahwa nilai default untuk gaya c-default menginstal gaya ini ketika Anda memasuki mode java.
  • awk - Gaya untuk mengedit kode AWK. Perhatikan bahwa nilai default untuk gaya c-default menginstal gaya ini ketika Anda memasuki mode awk.
  • pengguna - Ini adalah gaya khusus yang dibuat oleh Anda. Ini terdiri dari default pabrik untuk semua variabel gaya yang dimodifikasi oleh kustomisasi yang Anda lakukan baik dengan antarmuka Kustomisasi atau dengan menulis setqs dan c-set-offsets di tingkat atas file. Emacs Anda (lihat Dasar-Dasar Konfigurasi). Sistem gaya menciptakan gaya ini sebagai bagian dari inisialisasi dan tidak memodifikasinya setelah itu.

MEMPERBARUI:

Orang lain menyarankan menggunakan tab kunci untuk memasukkan \t tab karakter, tapi tolong tidak memaksa penyisipan karakter tab! Seperti yang dikatakan salah satu pembuat StackOverflow "hanya orang bodoh yang akan menggunakan tab untuk memformat kode mereka". Nah, itu agak keras, tapi perlu dicatat bahwa bahkan dua rival paling raksasa sekalipun, Google dan Microsoft, setujui poin ini (meskipun mereka merekomendasikan jumlah ruang yang berbeda secara default).

Google berkata:

Gunakan hanya spasi, dan inden 2 spasi sekaligus.

Microsoft mengatakan:

Karakter tab (\ 0x09) tidak boleh digunakan dalam kode. Semua indentasi   harus dilakukan dengan 4 karakter spasi.

Juga, emacswiki memiliki bagian Tab adalah Evil.

Jadi, pergilah dan lepaskan!


8
2018-03-22 22:22



Jawabannya adalah: (setq-default c-basic-offset <value>)


0
2018-03-22 22:00



Saya juga suka emac tetapi tidak tahan dengan upaya untuk mengelola tab untuk saya. Jadi saya menggunakan yang berikut ini di .emacs:

(global-set-key "\r" 'newline-and-indent)
(global-set-key "\C-m" 'newline-and-indent)
(global-set-key "\C-j" 'newline)

(defalias 'backward-delete-char-untabify 'backward-delete-char)
(defun indent-according-to-mode () (interactive)
  (save-excursion
    (goto-char (- (line-beginning-position) 1))
    (search-backward-regexp "^[         ]*")
  )
  (if (eq (point) (line-beginning-position))
    (insert (match-string 0))
    (save-excursion
      (goto-char (line-beginning-position))
      (insert (match-string 0))
    )
  )
)

(defun newline-and-indent () (interactive) (newline) (indent-according-to-mode))
(defun lisp-indent-line () (interactive) (insert "      "))
; Is there a way to fix this without a hook?
(defun my-c-hook ()
  (setq c-electric-flag nil)
  (defun c-indent-command (n) (interactive "*") (insert "       ")))
(add-hook 'c-mode-common-hook 'my-c-hook)
(defun my-perl-hook ()
  (defun perl-electric-terminator () (interactive "*") (self-insert-command 1))
  (defun perl-indent-command () (interactive "*") (insert "     ")))
(add-hook 'perl-mode-hook 'my-perl-hook)
(defun indent-for-tab-command () (interactive "*") (insert "    "))

Perilaku yang dihasilkan: Kunci tab murni adalah karakter tab yang akan disisipkan, menekan enter salinan spasi putih yang tepat (spasi atau tab) dari baris saat ini ke baris baru, dan semua perilaku inden khusus dalam mode ini dinonaktifkan. Jika Anda menggunakan bahasa lain, Anda mungkin harus memperpanjang / menyesuaikan di atas untuk menambahkan kait untuk mereka.

Catatan: Di atas, sebagian besar spasi dalam tanda kutip sebenarnya adalah tab literal. Jika tidak berhasil melalui SO dan salin / tempel kanan, Anda mungkin harus memperbaikinya sendiri secara manual.


-2
2018-03-23 01:17