Saya punya pertanyaan tentang Emacs Lisp. Apa perbedaan antara setq dan setq-default ?
Tutorial mengatakan setq berlaku di buffer lokal sementara setq-default memengaruhi semua buffer.
Misalnya, jika saya menulis (setq a-var a-vars-value) di init.el , saya temukan setelah memulai Emacs dan membuka buffer baru, a-var juga ada di sana dan nilainya adalah nilai -vars . Saya pikir itu tidak seharusnya ada di sana. Sepertinya tidak ada perbedaan antara setq dan setq-default .
Apakah ada yang salah dengan pemahaman saya?
Sebagai contoh:
Saya menulis (setq halo 123) di file init.el , dan saya menjalankan emacs abuffer di shell, lalu saya memasukkan "hello Cx Ce" , itu menunjukkan "123". Hal yang sama terjadi ketika saya menjalankan ini di semua buffer baru.
Saya menulis (setq tab-width 4) di file init.el. Ketika saya menjalankan Cx Ce lebar-tab , itu menunjukkan "8" (Mode saat ini adalah 'Teks'). Namun, ketika saya menggunakan (setq-default tab-width 4) , itu menunjukkan "4". Saya tidak bisa menjelaskan fenomena ini.
(setq tab-width 4)
berlaku di buffer tempat Anda mengevaluasi ekspresi; jika Anda mengevaluasinya di*scratch*
buffer, maka periksa nilainya di buffer itu.tab-width
adalah variabel buffer-local. Jadi ketika Anda(setq tab-width 4)
, itu hanya diatur ke 4 di buffer saat ini. Semua buffer lainnya mempertahankantab-width
default global, 8. Saat Anda(setq-default tab-width 4)
mengubah default globaltab-width
menjadi 4, jadi sekarang setiap buffer yang belum didefinisikantab-width
memiliki default baru tersebut.