T: bagaimana saya bisa mendapatkan buffer baru untuk menghormati pemetaan auto-mode-alist
?
Saat menemukan file , Emacs membandingkan ekstensi file dengan auto-mode-alist
untuk menentukan mode utama mana yang digunakan untuk buffer file. Apakah ada cara untuk menggunakan informasi auto-mode-alist
untuk menentukan mode buffer yang belum memiliki file yang terkait dengannya?
Yaitu: jika saya membuka buffer baru yang namanya memiliki sesuatu yang terlihat seperti ekstensi file, dapatkah saya membuatnya terbuka secara otomatis dalam mode yang diharapkan? Misalnya, jika saya membuka buffer baru a-new-buffer.el
yang belum dikaitkan dengan file, saya ingin membuka buffer emacs-lisp-mode
daripada dalam mode default.
buffers
major-mode
Dan
sumber
sumber
auto-mode-alist
, Anda membuat buffer " mengunjungi " file (dan itu menangani semuanya).org
buffer sementara untuk menguji fungsi baru yang saya tulis untuk digunakan dalamorg-mode
; b)R
penyangga sementara untuk melakukan manipulasi statistik yang cepat dan dibuang; c) buffer teks sementara untuk menulis email. Dalam setiap kasus, saya tidak ingin membuat file untuk dikunjungi, saya hanya ingin buffer yang dibuang yang tetap terbuka dalam mode yang sesuai.C-x C-f
yang tidak " membuat file kunjungan ". Itu adalah kesalahpahaman mendasar. Mereka hanya melakukan apa yang Anda cari. Hal ini hanya jika dan ketika Anda mencoba untuk menyimpan buffer bahwa file akan dibuat. Jika Anda tidak mencoba untuk menyimpan buffer, tidak ada file yang dibuat. Apa yang Anda inginkan, dari apa yang saya mengerti sejauh ini, adalah "mengunjungi file" (yang sebenarnya berarti membuka buffer dalam mode yang tepat).Jawaban:
File perintah kunjungan seperti
C-x C-f
jangan membuat file untuk dikunjungi. Mereka melakukan apa yang Anda cari.Hanya jika dan ketika Anda mencoba untuk menyimpan buffer , sebuah file akan dibuat .
Jika Anda tidak mencoba untuk menyimpan buffer, tidak ada file yang dibuat. Apa yang Anda inginkan, dari apa yang saya mengerti sejauh ini, adalah " mengunjungi file " (yang sebenarnya berarti membuka buffer dalam mode yang tepat).
sumber
n
untuk tidak menyimpan atau (sering) saya hanya menyimpan buffer. Dan kemudian saya melemparkan file yang dibuat ... atau tidak.)*scratch*
: Anda diminta untuk menyimpan ketika jari itu secara otomatis mengenaiC-x C-s
.Jika telah menggunakan solusi Juri Linkov selama bertahun-tahun.
Saya membuat buffer sementara dengan sesuatu seperti
C-x
b
test.org
C-j
. Itumajor-mode
ditentukan oleh ekstensi file melaluiauto-mode-alist
.Untuk menguji efeknya Anda dapat mencoba
(prog1 (and (switch-to-buffer "my-new.org") major-mode) (kill-buffer "my-new.org"))
=>
org-mode
. Dalamemacs -q
tes bersih akan kembalifundamental-mode
.sumber
advice
opsi yang saya gunakan. Tidak yakin saya mengikuti untuk apa(prog1...)
bagian ini, tetapi(setq-default major-mode ...)
bagian itu cukup bagus.prog1
-test hanya menunjukkan bahwa Anda mendapatkan yang diharapkanmajor-mode
ketika beralih ke buffer. Evalsetq-default
bagian dan jalankan tes. Ini akan kembaliorg-mode
Tanpasetq-default
itu akan kembalifundamental-mode
.Menemukan cara berbasis saran menggunakan ide yang berasal dari komentar @ Drew dan jawaban @ glucas yang akan saya rekam di sini kalau-kalau itu berguna bagi siapa pun.
Versi singkatnya: gunakan
after
saran untuk menanyakan apakah buffer memiliki nama file yang terkait, atur satu untuk sementara jika tidak, dan kemudian biarkan seluruhset-auto-mode
mesin menangani detailnya. Setelah sedikit pengujian (tidak ekstensif), tampaknya berfungsi dengan baik.Untuk
ido-switch-buffer
dan vanillaswitch-to-buffer
, dua nasihat adalah:Saya menemukan opsi ini bermanfaat di atas
find-file
titik di mana @Drew mengangkat karena jari-jari saya dapat melampaui otak saya: memori otot sering membuat saya masuk ke wilayah switch-to-buffer sebelum sepenuhnya terjadi pada saya yangfind-file
akan melakukan apa yang saya butuhkan. Sekarang, kedua opsi tersedia.UPDATE: bug kecil tapi berpotensi menjengkelkan dalam kode di atas: itu akan menjalankan kembali mode hook pada buffer setiap kali Anda beralih ke itu. Berikut ini memberikan nama file yang sebenarnya dari
/tmp
direktori dan menghindari masalah itu:sumber
The
set-auto-mode
fungsi mengatur mode berdasarkan file yang berhubungan dengan buffer. Berikut adalah fungsi yang sementara ditetapkanbuffer-file-name
dari nama buffer untuk mengatur mode:Anda dapat menjalankan ini ketika buffer diganti namanya menggunakan saran:
Saya tidak yakin tentang tempat terbaik untuk menghubungkan ini untuk memengaruhi buffer baru. Di sini saya menggunakan
buffer-list-update-hook
, tetapi dipanggil dalam banyak kasus daripada yang kita butuhkan.sumber
buffer-list-update-hook
karenachange-major-mode-hook
tidak dipanggil dengan buffer arus yang diharapkan. Sebagai catatan, mungkin lebih masuk akal untuk menyarankan fungsi switch-buffer seperti yang dilakukan @Dan dalam jawabannya.Anda dapat menggunakan * scratch * buffer untuk tujuan membuat buffer sementara yang memiliki mode utama yang sama dengan file yang sedang Anda kerjakan.
Berikut ini jawaban emacs SE yang mungkin memecahkan masalah Anda:
Bagaimana saya bisa dengan cepat beralih antara file dan buffer * scratch * memiliki mode utama yang sama?
Pertanyaan dan jawaban yang dirujuk keduanya diposting oleh saya. Jawaban dalam fungsi melakukan hal berikut:
*scratch-X-mode*
jika belum ada, dan beralih ke buffer yang baru dibuat ini.*scratch-X-mode*
sudah ada, itu hanya beralih ke buffer itu.sumber
Ada beberapa jawaban bagus di sini tetapi saya ingin menambahkan satu hal lagi. Emacs memiliki banyak fitur dan seringkali ada beberapa cara untuk melakukan sesuatu. Anda dapat menambahkan tag di bagian atas file apa pun yang memberi tahu emacs jenisnya, apa pun ekstensinya. Misalnya menambahkan ini:
Di bagian atas file akan memberi tahu emacs bahwa itu adalah file Python bahkan tanpa
.py
ekstensi. Perhatikan bahwa#
di awal baris adalah komentar gaya Python. Untuk jenis file yang berbeda, Anda dapat menggunakan komentar yang berbeda. Misalnya untuk menentukan file Lisp yang Anda gunakan;
untuk memulai baris komentar dan mengatur mode dalam emacs seperti ini:Lihat Menentukan Variabel File dan Memilih Mode File .
sumber
switch-buffer
) dan memiliki mode yang secara otomatis diatur ke sesuatu selainfundamental-mode
.