2011-10-31 33 views
41

Giả sử tôi đang tìm kiếm một lớp học JFactory bên trong một thư mục và đó là các thư mục con.Làm cách nào để tìm kiếm một từ trong toàn bộ dự án/thư mục một cách đệ quy?

Tôi làm cách nào để gửi tệp có chứa class JFactory?

Tôi không muốn thay thế từ đó nhưng tôi cần tìm tệp đó chứa class JFactory.

+0

bạn có thể sử dụng grep thay thế không? –

+5

Sẽ thuận tiện hơn nếu bạn không phải rời khỏi trình soạn thảo/IDE của mình. –

Trả lời

62
:vimgrep /JFactory/ **/*.java 

Bạn có thể thay thế mẫu /JFactory/ với /\<JFactory\>/ nếu bạn muốn toàn trận đấu từ. :vim là viết tắt của :vimgrep.

Nếu JFactory hoặc \<JFactory\> là mô hình tìm kiếm hiện tại của bạn (ví dụ bạn đã nhấn * trên một lần xuất hiện), bạn có thể sử dụng một mô hình tìm kiếm trống: :vimgrep // **/*.java, nó sẽ sử dụng mô hình tìm kiếm cuối cùng để thay thế. Tiện dụng!

Cảnh báo: :vimgrep sẽ kích hoạt autocmds nếu được bật. Điều này có thể làm chậm tìm kiếm. Nếu bạn không muốn điều đó, bạn có thể làm:

:noautocmd vimgrep /\<JFactory\>/ **/*.java 

sẽ nhanh hơn. Nhưng: nó sẽ không kích hoạt làm nổi bật cú pháp hoặc mở gz file ungzipped vv

Lưu ý rằng nếu bạn muốn có một chương trình bên ngoài để grep mô hình của bạn, bạn có thể làm điều gì đó như sau:

:set grepprg=ack 
:grep --java JFactory 

Ack là một thay thế Perl bằng văn bản cho grep. Lưu ý rằng sau đó, bạn sẽ phải chuyển sang Perl regexes.

Khi lệnh bạn chọn trở về, bạn có thể duyệt kết quả tìm kiếm bằng các lệnh được mô tả trong tài liệu Vim tại :help quickfix. Lookup :cfirst, :cnext, :cprevious, :cnfile vv

2014 update: hiện nay có những cách thức mới để làm điều đó với the_silver_searcher hoặc the_platinum_searcher và một trong hai ag.vim hoặc unite.vim plugins.

+7

Để tham khảo: ': vim' là tên viết tắt của lệnh': vimgrep'. –

+0

cũng lưu ý rằng ': lvimgrep' thực hiện tương tự với cửa sổ vị trí thay vì cửa sổ quickfix. Tiện dụng nếu bạn cũng đang xử lý kết quả đầu ra của trình biên dịch và không muốn đi qua lại với ': colder',': cnewer' mọi lúc – sehe

+0

nhưng vẫn không thể lấy danh sách tên tệp có chứa từ "JFactory ". – shibly

2

Hãy xem ctagscscope cho phép bạn chuyển sang định nghĩa lớp học và chức năng và tìm nơi các chức năng/lớp đó được sử dụng.

12

Từ thư mục gốc của dự án, chạy sau:

grep -H -r 'what_you_search' * | less 

Bạn sẽ nhận được một danh sách các thư mục và phù hợp với dòng với chuỗi đó.

0

Mở cửa sổ dòng lệnh bằng cách:

Esc - để enssure bạn đang ở trong chế độ bình thường

gõ q, gõ:

dòng lệnh nên mở (nó giống như một tập tin tmp viết lệnh bạn có thể điều hướng khi bạn điều hướng bình thường trong bất kỳ tệp vim nào ...

loại i để vào chế độ chèn

ví dụ này sẽ tìm kiếm các chuỗi to_srch đệ quy rống lên thư mục hiện hành đối với tất cả các loại tập tin của loại '.js' và ' java' nhưng bỏ qua tất cả các đường dẫn tập tin chứa chuỗi node_modules

:g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'` 

Bây giờ Wheen bạn: Copen bạn có thể di chuyển với các phím mũi tên qua kết quả sarch ...

bạn cũng có thể thiết lập những người trong vimrc

" how-to search recursively under the current dir for the files of type js and java but omit the 
    " node_modules file paths 
    ":g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'` 
    " reminder open the quick fix window by :copen 20 
    " reminder close the quick fix window by :ccl 

bạn có thể bỏ qua là người đầu tiên: q/to_srch/Tôi sử dụng nó để làm nổi bật các kết quả tìm kiếm tự động kể từ khi tôi đã "thiết lập hlsearch" trong tôi ~/vimrc

Bất kỳ gợi ý làm thế nào để kích hoạt tính năng tự động các kết quả srch từ vimgrep hoặc trong vimrc sẽ được đánh giá cao ...

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