Salah satu fitur utama yang saya lewatkan tentang Vim, adalah selalu menyimpan nama file file saat ini di %
buffer ( info lebih lanjut ). Itu memungkinkan meluncurkan perintah dengan mudah seperti:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Saya ingin memiliki fungsi serupa di bawah emacs
(versi 24, jika itu membuat perbedaan), yaitu memiliki cara mudah untuk memasukkan nama file yang dibuka di buffer saat ini.
Contoh apa yang ingin saya lakukan
Di sini saya menjelaskan beberapa kasus penggunaan dasar untuk menjelaskan lebih baik ketika saya merasa perlu untuk jalan pintas seperti itu
Kompilasi: Ketika saya memasukkan
M-x compile
emacs meminta saya untuk mengkompilasi perintah. Saya ingin masukgcc (current-buffer)
dengan mudah.Load-file: Ketika saya mengedit file .emacs saya, saya ingin memuatnya segera untuk menguji perubahan. Cara saya melakukannya adalah
M-x load-file
dan kemudian saya selalu mengeja namanya . e m a c s. Saya mau jalan pintas.Luncurkan proses luar: Saya berikan
du -sh
sebagai contoh, hanya untuk menggambarkan bahwa saya ingin pintasan juga tersedia ketika saya menjalankan perintah shell denganM-!
Apa yang saya temukan sejauh ini
- Pertanyaan ini di sini di U&L. Jawaban yang diberikan pada dasarnya menunjukkan di mana menemukan nama file buffer sehingga orang dapat menambahkannya ke cincin bunuh. Ini bukan yang saya cari, saya tidak ingin harus secara manual mematikan nama file sebelum saya ingin menggunakannya. (Juga solusi yang dijelaskan dalam kedua jawaban tampaknya tidak bekerja dengan lancar di emacs saya dan memerlukan penekanan tombol tambahan yang membuat mereka sedikit sakit).
EDIT : Sedikit tidak berhubungan, oleh saya menemukan mengapa solusi ini tidak berhasil. Saya mengaktifkan IDO, baik atau buruk.
- The
(current-buffer)
fungsi yang dijelaskan dalam manual tidak mengembalikan nama file dalam buffer saat ini, tapi tak dalam contoh saya berikan di atas, saya mengevaluasi kode elisp. Apakah ada cara untuk memasukkan hasil evaluasi fungsi ini dalam buffer (mini) dan mengikat cara ini ke jalan pintas?
Apakah saya salah berpikir seperti ini?
Saat ini saya sedang belajar menggunakan emacs (sebenarnya sudah beberapa bulan) setelah bertahun-tahun menggunakan Vim. Saya ingin menghindari jebakan menggunakan emacs-in-a-Vim-way . Jika Anda merasa bahwa apa yang saya minta tidak terlalu emacs-y , dan harus ada cara (bersih?) Yang lebih baik untuk melakukannya, harap sebutkan dalam jawaban Anda.
(global-set-key (kbd "C-i") buffer-file-name)
jika Anda ingin menjadi Ctrl + I. Tentang .emacs,M-x load-file RET
lakukan yang Anda inginkan; Anda tidak perlu menulis apa pun.(buffer-file-name)
saat Anda mengetik di minibuffer, Anda dapatkannil
, karena(current-buffer)
minibuffer. Anda dapat mengganti buffer saat berada di minibuffer, jadi sulit untuk melacak buffer mana yang Anda pikirkan tentang buffer saat ini pada saat buffer saat ini, seperti yang Emacs lihat, adalah minibuffer.Jawaban:
Anda bisa memasukkan fungsi seperti berikut ke dalam .emacs Anda dan mengikatnya ke tombol apa saja yang Anda suka.
Lihat juga pertanyaan ini , sepertinya mirip.
sumber
Varian sedikit pada jawaban @ easyb adalah menyalin path ke ring kill Anda alih-alih menempatkannya ke buffer Anda (berguna untuk file read only):
sumber