2011-08-09 41 views
9

Tôi muốn thực hiện một cái gì đó giống như tính năng "Go To File" của Resharper cho Emacs. Khi một máy ép nêu shortcut, Resharper bật một hộp văn bản chấp nhận một chuỗi ký tự đại diện và hiển thị một trình đơn autocompletion liệt kê tất cả các file trong một dự án phù hợp mà wildcard:emacs - làm thế nào để tìm kiếm tập tin trong thư mục con

"Go To File" dialog http://www.jetbrains.com/resharper/features/screenshots/50/navigation_gotofile.png

Còn bây giờ, tôi biết một cách thô để đạt được điều gì đó tương đương hoặc ít hơn. Nó liên quan đến việc chạy dired với -lR và sau đó gọi dired-isearch-filenames - điều đó sẽ bắt đầu tìm kiếm gia tăng trên toàn bộ phân cấp tệp trong thư mục gốc nhất định.

cập nhật. Tôi cũng biết về tùy chọn mở tải bộ đệm, giữ chúng trong bộ nhớ và sử dụng switch-to-buffer. Giải pháp này hoạt động độc đáo với ido, mặc dù nó không phải là 100% chống đạn (nếu một số tệp được thêm hoặc xóa?). Nó cũng không hoạt động tốt với tabbar, vì các tab sẽ hiển thị tất cả các tệp được bao gồm trong dự án chứ không phải một tập con của dự án đại diện cho ngữ cảnh hiện tại của tôi.

Tuy nhiên, điều này cho thấy nhiều thông tin không cần thiết và thiếu tự động hoàn thành. Tôi đã xem idoicicles, nhưng chúng dường như hoạt động nông, chỉ trong thư mục hiện tại. Có một plugin Emacs sẽ giúp tôi đạt được mục tiêu của mình không?

Trả lời

5

Mặc dù bạn có thể không muốn để giữ rất nhiều bộ đệm mở, bạn có thể treo IDO vào recentf, theo dõi tập tin gần đây mở:

(recentf-mode 1) 
(setq recentf-max-saved-items 300) 

(defun ido-choose-from-recentf() 
    "Use ido to select a recently opened file from the `recentf-list'" 
    (interactive) 
    (find-file (ido-completing-read "Open file: " recentf-list nil t))) 

(global-set-key [(meta f11)] 'ido-choose-from-recentf) 

Tôi đã sử dụng thủ thuật này trong nhiều năm, và đó là 99 % của tất cả các chuyển đổi tập tin tôi cần.

Ngoài ra, tôi sử dụng M-x rgrep và bạn cũng có thể muốn xem M-x find-diredM-x find-grep-dired.

Để có thêm tùy chọn, hãy xem câu trả lời cho this similar question.

+1

Dự án của tôi không có nhiều tập tin, đó là lý do tại sao tôi đi cho một giải pháp câm, nhưng thực tế. Tôi chỉ cần gọi "tìm path1 path2 .. pathN -print0", chia kết quả bằng "\ 0" -s và nạp chúng vào ido-complete-read. Cảm ơn vì một ý tưởng über! –

3

Bạn đã thử helm chưa? Bạn có thể dễ dàng chọn tìm kiếm tệp, bộ đệm, lệnh và nhiều thứ khác.

4

Projectile có chức năng có tên projectile-jump-to-project-file làm nhiều hơn hoặc ít hơn những gì bạn muốn. Ngoài ra còn có find-file-in-project - một tiện ích đơn giản hơn, nhưng phụ thuộc vào sự hiện diện của GNU tìm thấy.

2

Bạn đã đề cập Icicles, nhưng bạn nhầm tưởng rằng nó "hoạt động nông". Nó hoạt động theo bất kỳ cách nào bạn muốn nó hoạt động. Bạn có thể tìm kiếm bất kỳ tệp nào trên hệ thống của mình, nếu bạn muốn, khớp với bất kỳ phần nào của tên tệp và đường dẫn. Và bạn có thể định nghĩa một dự án của các tập tin và/hoặc thư mục cụ thể, lưu định nghĩa của nó, và sau đó chỉ tìm kiếm trong số các tệp/thư mục đó. (Emacs filesets là một tập hợp con nghiêm ngặt của tính năng này, nhưng bạn có thể sử dụng filesets trực tiếp cùng một cách.)

Điều này sẽ giúp (xem thêm các liên kết ở cuối trang đó):

http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input

Các vấn đề liên quan