Perintah apa yang ada mendapatkan nama file buffer file saat ini seperti ini?
Sayangnya tidak ada perintah siap pakai untuk ini, tetapi kita dapat membuatnya sebagai berikut:
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
Keajaibannya ada di fungsi minibuffer-selected-window ; itu melakukan hal yang benar dengan memilih buffer terakhir sebelum minibuffer diaktifkan. Kalau tidak hanya menggunakan nama file buffer tidak akan membawa kita nama file ke minibuffer. Menariknya, fungsi yang sama dapat digunakan dalam buffer biasa atau minibuffer untuk memasukkan nama file. Tidak diperlukan perawatan khusus.
Apa yang mengikat kunci standarnya?
Tidak ada, tetapi Anda dapat memilih yang mudah dan menetapkannya sebagai berikut:
(global-set-key (kbd "C-c f") 'name-of-the-file)
Masukkan baris kode lisp di atas dalam file init.el Anda.
Ini berfungsi dalam sebagian besar kasus sepele, tetapi sulit untuk memprediksi konflik apa yang mungkin terjadi dengan mode apa pun yang Anda aktif saat menjalankan fungsi ini.
Bagaimana jika buffer tidak mengunjungi nama file yang valid, seperti buffer awal? Kemudian kesalahan ini ditampilkan di area gema:
name-of-the-file: Wrong type argument: char-or-string-p, nil
Memilih buffer yang valid dengan nama file yang tepat sebelum memohon pintasan akan menghindari kesalahan tersebut.
Ada beberapa solusi lain seperti di atas, tetapi mereka terutama berbeda dalam cara mereka menangani pengecualian atau penggantian untuk setiap konflik. Sebagai contoh, beberapa menggunakan kait mode untuk membuat fungsi ini hanya tersedia dalam mode tertentu.
M-n
. Itu tidak bekerja di mana-mana, tetapi bekerja di banyak tempat. Juga, karena Anda mengerti, Anda mungkin menyukai lgrep dan rgrep, yang sedikit lebih interaktif, saya pikir.