Một trong những tính năng chính tôi nhớ về Vim, là nó luôn lưu tên tệp của tệp hiện tại trong %
bộ đệm ( thông tin thêm ). Điều đó cho phép khởi chạy các lệnh dễ dàng như:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Tôi muốn có chức năng tương tự theo emacs
(phiên bản 24, nếu điều đó tạo ra sự khác biệt), cụ thể là có một cách dễ dàng để chèn tên của tệp được mở trong bộ đệm hiện tại.
Ví dụ về những gì tôi muốn làm
Ở đây tôi mô tả một số trường hợp sử dụng cơ bản như để giải thích rõ hơn khi tôi cảm thấy cần một phím tắt như vậy
Biên dịch: Khi tôi nhập
M-x compile
emacs yêu cầu tôi cho một lệnh biên dịch. Tôi muốn vàogcc (current-buffer)
dễ dàng.Tải tệp: Khi tôi đang chỉnh sửa tệp .emacs của mình, tôi muốn tải ngay để kiểm tra các thay đổi. Cách tôi làm là
M-x load-file
và sau đó tôi luôn đánh vần tên . e m a c s. Tôi muốn có một phím tắt.Khởi chạy các tiến trình bên ngoài: Tôi đã đưa ra
du -sh
làm ví dụ, chỉ để minh họa rằng tôi muốn phím tắt cũng khả dụng khi tôi thực hiện các lệnh shell vớiM-!
Những gì tôi tìm thấy cho đến nay
- Câu hỏi này ở đây trên U & L. Các câu trả lời được đưa ra về cơ bản chỉ ra nơi tìm tên tệp của bộ đệm để người ta có thể thêm nó vào vòng giết. Đó không phải là chính xác những gì tôi đang tìm kiếm, tôi không muốn phải giết tên tập tin theo cách thủ công trước khi tôi muốn sử dụng nó. (Ngoài ra các giải pháp được mô tả trong cả hai câu trả lời dường như không hoạt động trơn tru trong các emac của tôi và yêu cầu thêm các lần nhấn phím khiến chúng hơi đau một chút).
EDIT : Một chút không liên quan, bởi tôi đã tìm ra lý do tại sao các giải pháp này không hoạt động. Tôi đã bật IDO, tốt hơn hoặc xấu hơn.
- Các
(current-buffer)
chức năng được mô tả trong cuốn hướng dẫn thực hiện trả lại tên của tập tin trong bộ đệm hiện tại, nhưng không nơi nào trong các ví dụ tôi đưa ở trên, tôi đang đánh giá đang elisp. Có cách nào để chèn kết quả đánh giá của hàm này vào bộ đệm (mini) và liên kết theo cách này với một phím tắt không?
Tôi có sai khi nghĩ theo cách này?
Tôi hiện đang học cách sử dụng emacs (thực tế đã được vài tháng) sau nhiều năm sử dụng Vim. Tôi muốn tránh bẫy sử dụng-emacs-in-a-Vim có thể dự đoán được . Nếu bạn cảm thấy rằng những gì tôi yêu cầu không phải là rất emacs-y , và nên có cách tốt hơn (sạch hơn?) Để làm điều đó, xin vui lòng đề cập đến nó trong câu trả lời của bạn.
(buffer-file-name)
trong khi bạn đang gõ trong xe buýt nhỏ, bạn sẽ nhận được nil
, bởi vì đó (current-buffer)
là xe buýt nhỏ. Bạn cũng có thể chuyển đổi bộ đệm khi ở trong bộ đệm, vì vậy thật khó để theo dõi bộ đệm nào là những gì bạn nghĩ về bộ đệm hiện tại vào thời điểm bộ đệm hiện tại, như Emacs nhìn thấy, là bộ đệm.
(global-set-key (kbd "C-i") buffer-file-name)
nếu bạn muốn nó là Ctrl + I. Về .emacs,M-x load-file RET
làm những gì bạn muốn; bạn không cần phải viết bất cứ điều gì.