Indentasi Emacs menggunakan Tab


8

Apakah ada cara untuk membuat kode indentasi Emacs hanya menggunakan tab secara global dan bukan spasi. Saya tahu perintah tabify. Saya lebih suka lekukan otomatis untuk menggunakan tab daripada campuran tab dan spasi seperti konfigurasi default tidak.

Jawaban:


7

Nah, untuk indent dengan tab, Anda akan ingin memastikan bahwa indent-tabs-modeadalah t(yang merupakan nilai default). Tetapi untuk mendapatkan hanya tab, Anda harus menyesuaikan mode yang melakukan lekukan sedemikian rupa sehingga setiap baris diindentasi oleh beberapa dari Anda tab-width(default 8). Misalnya, dalam mode C, Anda dapat mencoba pengaturan c-basic-offsetke 8.

Atau, Anda bisa mengurangi nilai Anda tab-widthmenjadi lebih kecil, sehingga Emacs tidak perlu menggunakan spasi untuk mencapai setiap tingkat indentasi. Tetapi jika Anda melakukannya, semua orang yang harus mengerjakan kode Anda (dan menggunakan penghentian tab 8 karakter standar) akan merasa terganggu.

Saya mendorong Anda untuk mempertimbangkan kembali. Secara pribadi, saya menemukan bekerja pada kode menjorok dengan tab menjadi menjengkelkan, terutama jika mereka tampaknya tidak 8 tab ruang. (Yang terburuk adalah kode di mana beberapa baris menggunakan spasi, beberapa baris menggunakan tab, dan jelas bukan 8 tab spasi.) Apakah kita semua mendukung dan adil (setq indent-tabs-mode nil).


Saya akan menandai pertanyaan ini untuk lebar tab pengaturan paragragh kedua dan komentar tidak mencampur tab dan spasi. Tetapi jika lebar tab Anda diatur, pengeditan lekukan jauh lebih mudah dengan tab untuk setiap level daripada beberapa spasi
user151019

Saya pikir paragraf ketiga Anda umumnya bermanfaat, tetapi seringkali kita tidak bisa mengendalikan gaya indentasi dari penulis asli, misalnya, kepada siapa kami mengirimkan permintaan tarikan / gabung. Saya punya preferensi saya, mereka punya mereka. Saya pikir itu hormat untuk menggunakan gaya lekukan mereka ke tingkat yang masuk akal, jadi kadang - kadang pilihan bukan milik kita .
r2evans

7

Emacs hadir dengan beberapa gaya standar untuk indentasi C, atau Anda dapat menulis sendiri jika tidak ada yang sesuai dengan kebutuhan Anda. Di antara gaya standar , tampaknya Anda sedang mencari linux(gaya yang digunakan dalam sumber kernel Linux), yang memiliki lekukan 8 kolom dan menggunakan karakter tab dengan lebar 8.

Anda dapat menjadikan pengaturan ini gaya default untuk C dengan meletakkannya di .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Pastikan Anda tidak menggunakan pengaturan ini saat berkolaborasi dengan orang lain dengan preferensi yang berbeda. Secara khusus, menggunakan tab akan membuat Anda menjadi musuh. Jika file tertentu disimpan dalam gaya tertentu, Anda dapat menggunakan variabel file untuk memastikan bahwa semua orang yang mengedit file di Emacs menggunakan pengaturan yang sama:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Jika Anda memiliki keseluruhan proyek dengan file C dengan indentasi yang sama, gunakan variabel direktori daripada mencemari setiap file. Buat file yang disebut .dir-locals.eldengan konten seperti berikut:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

Tab mengganggu saya, tetapi saya harus mencari cara untuk membuat emacs hanya menggunakan tab untuk membuat indentasi sehingga saya bisa mengerjakan kode orang lain. Inilah yang bekerja untuk saya:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Saya perhatikan bahwa sebelum mengacaukan apa pun, ketika saya menekan tombol tab, itu otomatis menjorok dengan 2 kolom. Mengatur "lebar-tab" agar sesuai dengan 2 kolom offset yang diizinkan emacs untuk menggunakan tab saat melakukan format otomatis. Saya bekerja dalam mode nxml, tapi saya pikir ini harus bekerja untuk mode apa pun.


Bagus. Ini juga mengganggu saya. Tidak intuitif untuk mengatur lebar tab agar sesuai dengan offset kolom. Kerja bagus. Saya menggunakan ide ini dalam mode c ++
Sean Lynch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.