2013-09-26 40 views
14

Thông thường, tôi biết tên tập tin nhưng không nhớ hoặc tìm thấy nó cồng kềnh để chỉ định thư mục chính xác. Tôi muốn để có thể làm tìm-tập tin x/y/*/some_file.txt nơi * sẽ cho phép tìm kiếm trong thư mục đệ quy thay vì chỉ là một hiện tại.Làm cách nào để tìm tập tin đệ quy trong các thư mục

+1

Mở rộng đường dẫn như vậy có hai nguy cơ tiềm ẩn: có thể có nhiều hơn một mở rộng hợp lệ, có thể có quá nhiều đường dẫn để thử (đặc biệt nếu có vòng lặp thư mục) ly, bạn sẽ phải chỉ sử dụng một cái gì đó như 'find-name-dired'. –

Trả lời

0

Icicles lệnh icicle-locate (hoặc icicle-locate-file, nếu bạn không có chương trình locate cho HĐH) được thực hiện cho điều đó. Locate a file anywhere under a given directory (bao gồm ~HOME hoặc thư mục gốc).

Bạn có thể đối sánh với bất kỳ phần nào của tên tệp tuyệt đối (ví dụ: đường dẫn và tên tệp). Bạn có thể sử dụng một số loại đối sánh, bao gồm cả regexp, chuỗi con và kết hợp mờ.

5

ido-find-file thực hiện điều này: khi tên tập tin mà bạn nhập không phù hợp với bất cứ điều gì trong thư mục hiện, nó sử dụng một cái gì đó giống như locate để phù hợp với những gì bạn đã viết chống lại tất cả các tập tin trên hệ thống của bạn.

Quá trình cài đặt chỉ là một dòng:

(ido-mode) 

Sau này, C-x C-f sẽ gọi ido-find-file. Ngoài ra, tôi thường thêm:

(setq ido-enable-flex-matching t) 

vì tôi thích nó, nhưng với nó, bạn sẽ locate nhiều kết quả hơn, ví dụ: foo cũng sẽ phù hợp với froo.

+0

Điều này không tìm thấy đệ quy. Nó chỉ tìm kiếm mờ trong thư mục hiện tại !! Flplr là tốt hơn – mythicalcoder

1

chỉnh sửa: Tôi thấy tốt hơn nhiều với projectile, xem câu trả lời khác của tôi.

Có tìm-recursive.el: http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt

Tải về nó, đặt nó trong đường dẫn tải của bạn và yêu cầu nó trong emacs của bạn: (nó không phải là có sẵn thông qua ELPA hoặc el-get)

(require 'find-recursive)  

bây giờ khi bạn gọi Mx tìm-đệ quy, nó sẽ yêu cầu tên tệp để tìm kiếm đệ quy, thư mục cơ sở, sau đó bạn phải chọn một tệp trong danh sách kết quả. Nó không được tích hợp vào ido không may, nhưng tôi thích nó, nó rất hữu ích đôi khi.

5

Tôi đã từ lâu đã tìm kiếm tính năng đó và Tôi bây giờ hài lòng với những gì tôi thấy: Tôi đang sử dụng helm-projectile.

Projectile là thư viện tương tác dự án. Dự án là thư mục VCS hoặc thư mục chứa tệp .projectile.Nó được dựa trên GNU tìm (nhưng cung cấp một emacs tinh khiết Lisp thực hiện quá)

https://github.com/bbatsov/projectile

(bạn có thể cài đặt nó với packages.el). Bạn có thể sử dụng nó một mình: gọi projectile-find-file (hoặc projectile-mode và C-c p f). Nó sử dụng ido để hoàn thành theo mặc định, nhưng trong trường hợp đó tôi thích giao diện của helm-projectile.

Đồng nghiệp của tôi tiếp tục yêu cầu tôi sử dụng Văn bản tuyệt vời vì tính năng đó. May mắn thay, tôi tìm thấy đạn :)

+0

Đạn là tuyệt vời. Nó dễ sử dụng và thẳng về phía trước. – gosukiwi

1

Đây là giải pháp cung cấp cho bạn khả năng chọn lọc trên các tệp và thư mục con được tìm kiếm. Để sử dụng nó, bạn cần cả Dired+Icicles.

Lệnh này, chỉ được sử dụng trong Dired, là icicle-visit-marked-file-of-content-recursive (hoặc phiên bản -other-window của nó). Giá trị này được ràng buộc là M-+ C-F (đối với cửa sổ khác, sử dụng M-+ C-O - và có, đó là chữ hoa FO).

Những gì nó: bộ đệm

  • Nó cung cấp, là ứng cử viên hoàn thành, tất cả các tập tin đánh dấu trong thư mục Dired hiện tại, pslus tất cả những người trong bất kỳ thư mục con được đánh dấu đã Dired và cứ như vậy theo cách đệ quy.

  • Bạn có thể truy cập vào bất kỳ số lượng ứng cử viên nào phù hợp với đầu vào minibuffer của bạn, bao gồm tất cả chúng. Bạn có thể truy cập một số phù hợp với mẫu đầu vào minibuffer, sau đó thay đổi mẫu để khớp và truy cập các mẫu khác --- tất cả trong cùng một lệnh gọi.

  • "Matching" your input can mean either or both:

    • Phù hợp với tập tin tên
    • Phù hợp với tập tin nội dung

    Đó là, đầu vào của bạn có thể gồm hai phần (tách ra bằng cách nhấn C-M-j: một tệp-n phần ame và phần nội dung tập tin. Thu hẹp các lựa chọn bằng cách khớp tên tệp và thu hẹp hơn nữa bằng cách khớp văn bản trong các tệp đó. Tìm kiếm này nhanh - thành công ngay sau khi tìm thấy một kết quả trùng khớp trong tệp.

    Bạn có thể bỏ qua một phần: chỉ khớp tên tệp (nhanh) hoặc chỉ nội dung tệp (chậm hơn, tự nhiên).

  • Bạn có thể kết hợp các mẫu nhập - progressive completion. Việc thêm các mẫu bổ sung để phù hợp, tăng dần và tương tác dễ dàng hơn nhiều so với việc cố gắng tạo ra một regexp đơn mà chỉ là những gì bạn muốn.

  • Mỗi mẫu đầu vào (mỗi phần của mẫu hai phần) có thể là regexp. Phù hợp mờ cũng có sẵn.

  • Bạn có thể chỉ chèn các thư mục con vào bộ đệm Dired của bạn, thay vì có chúng dưới dạng bộ đệm Dired riêng biệt.Bất kỳ tệp và thư mục con nào được đánh dấu trong bộ đệm Dired đều được xử lý theo cùng một cách.

    Nếu bạn không muốn đi sâu vào các subdir được đánh dấu, bạn có thể sử dụng phiên bản không đệ quy của lệnh, icicle-visit-marked-file-of-content, được liên kết với C-F (C-O cho cửa sổ khác).

Nếu bạn cũng sử dụng Bookmark+ thì bạn có thể đánh dấu bộ đệm Dired hoặc bộ bộ đệm Dired. Dấu trang ghi lại các tệp và thư mục con nào được đánh dấu, thư mục con nào được chèn vào, và các tệp và thư mục con nào bị bỏ qua. Nhảy tới một dấu trang như vậy sẽ khôi phục tất cả những thứ này. Điều này sẽ cho bạn một cách để ảnh chụp một dự án, sau đó bạn có thể tìm kiếm bằng M-+ C-F, vv

15

Như đã trình bày here:

M-x find-name-dired 

Sau khi bạn cung cấp các thư mục và mô hình các tập tin phù hợp sẽ được hiển thị trong một Bộ đệm bị bỏ qua. Bạn có thể điều hướng danh sách tệp (C-n, C-p, v.v.) và mở tệp theo ý muốn (Ret).

1

Rất nhiều tùy chọn được liệt kê, tôi đang sử dụng lệnh tiếp theo:

find-file-in-current-directory 

Bạn có thể đặt nó trong emacs của bạn như thế này:

;; Find file in current directory: 
(global-set-key (kbd "C-M-,") 'find-file-in-current-directory) 

Giao diện trông rất quen thuộc đối với những người sử dụng Các công cụ fsf (https://github.com/junegunn/fzf)

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