Lệnh hiện có nào nhận được tên tệp bộ đệm hiện tại như thế này?
Thật không may, không có lệnh sẵn sàng cho việc này, nhưng chúng ta có thể thực hiện một lệnh như sau:
(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)))))
Phép thuật nằm trong chức năng cửa sổ được chọn nhỏ ; nó thực hiện đúng bằng cách chọn bộ đệm cuối cùng trước khi bộ thu nhỏ được kích hoạt. Nếu không, chỉ sử dụng tên tệp đệm sẽ không đưa chúng ta tên tệp vào bộ thu nhỏ. Thật thú vị, chức năng tương tự có thể được sử dụng trong một bộ đệm thông thường hoặc bộ thu nhỏ để chèn tên tệp. Không cần điều trị đặc biệt.
Ràng buộc khóa mặc định của nó là gì?
Không có gì, nhưng bạn có thể chọn một tiện ích và gán nó như sau:
(global-set-key (kbd "C-c f") 'name-of-the-file)
Đặt các dòng mã lisp ở trên trong tệp init.el của bạn.
Điều này hoạt động trong hầu hết các trường hợp tầm thường, nhưng khó có thể dự đoán những gì nó có thể xảy ra với bất kỳ chế độ nào bạn đã kích hoạt khi gọi chức năng này.
Điều gì xảy ra nếu bộ đệm không truy cập tên tệp hợp lệ, chẳng hạn như bộ đệm đầu? Sau đó, lỗi này được hiển thị trong khu vực tiếng vang:
name-of-the-file: Wrong type argument: char-or-string-p, nil
Chọn một bộ đệm hợp lệ với một tên tệp thích hợp trước khi gọi phím tắt sẽ tránh các lỗi đó.
Có một số giải pháp khác như ở trên, nhưng chúng chủ yếu khác nhau về cách chúng xử lý các trường hợp ngoại lệ hoặc ghi đè cho bất kỳ xung đột nào. Ví dụ, một số móc chế độ sử dụng để làm cho chức năng này chỉ khả dụng trong một số chế độ nhất định.
M-n
. Nó không hoạt động ở mọi nơi, nhưng hoạt động ở nhiều nơi. Ngoài ra, vì bạn đang grepping, tôi có thể thích lgrep và rgrep, tương tác nhiều hơn một chút, tôi nghĩ vậy.