Bagaimana saya bisa memasukkan nama file buffer file yang aktif ke dalam perintah?
Ketika saya menjalankan perintah yang membutuhkan nama file, saya sering melakukannya dari buffer file dan ingin nama file itu saat mengetik perintah ke minibuffer.
Saya mencari hipotesis C-x…yang bisa saya ketik saat membentuk baris perintah di minibuffer.
Jadi jika buffer sementara adalah file bernama Lorem Ipsum.txt
, saya ketik ini:
M-x grep RET 'foo' SPC C-x … RET
yang M-xgrepRETmenyajikan minibuffer bisikan untuk grep
perintah. Sebagai tanggapan, saya telah mengetik argumen pola regex ( 'foo') dan memasukkan argumen nama file ( C-x…). Minibuffer itu akan berakhir sebagai:
grep -nH -e 'foo' 'Lorem Ipsum.txt'
Perintah apa yang ada mendapatkan nama file buffer file saat ini seperti ini? Apa yang mengikat kunci standarnya?
files
minibuffer
hidung besar
sumber
sumber
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.Jawaban:
Sayangnya tidak ada perintah siap pakai untuk ini, tetapi kita dapat membuatnya sebagai berikut:
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.
Tidak ada, tetapi Anda dapat memilih yang mudah dan menetapkannya sebagai berikut:
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:
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.
sumber
enable-recursive-minibuffers
.(define-key minibuffer-local-map (kbd "C-c f") 'name-of-the-file)'. In addition to this useful function I also created the function
nama-of-the-buffer` yang saya gunakan untukC-c b
memasukkan nama buffer saat ini.Saat menggunakan
dired-x
pintasan keyboardC-x C-j
terikatdired-jump
. Jadi dari buffer file Anda, Anda berakhir di baris dired kanan dan dapat menyalin nama file denganw
. Dan kemudian Anda dapat menempelkannya di buffer mini.Kemungkinan lain untuk mengisyaratkan pengetikan nama file adalah penyelesaian file buffer mini standar Emacs. Cukup ketikkan karakter pertama dari nama file Anda dan kemudian TAB.
sumber
w
(perintahdired-copy-filename-as-kill
).Pertanyaannya meminta perintah Emacs yang ada untuk melakukan ini.
Seperti yang dinyatakan sebelumnya:
yang ternyata menjadi jawaban untuk pertanyaan ini.
sumber