2009-03-29 44 views
35

Khi sử dụng Vim và được cung cấp một thư mục chứa mã (ví dụ ~/trunk /) với một số thư mục con, có cách nào để grep/tìm kiếm các phiên bản văn bản/regex trên toàn bộ mã nguồn không?Làm thế nào để bạn tìm kiếm tất cả các mã nguồn trong Vim?

Tại thời điểm này tôi sử dụng:

:lcd ~/trunk 
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py 

(Rõ ràng là tôi đang hạn chế này để file Python, mà là một vấn đề khác nhau, nhưng đó là cần lưu ý rằng lý tưởng tôi muốn giới hạn tìm kiếm các tập tin với mở rộng cụ thể)

Trả lời

36
:vimgrep "pattern" ~/trunk/**/*.py 
:copen 20 

Nếu bạn có khá một dự án lớn tôi khuyên bạn nên để bạn sử dụng cscopevim plugins. Đây là một thiết kế để xử lý các dự án lớn: SourceCodeObedience

Có mô tả ngắn gọn về cách grep text sử dụng SourceCodeObedience.

+0

Cái nào? vimgrep hoặc .sco? –

+0

vimgrep. Tôi đã không đầu tư thời gian vào SCO để nó trở nên hữu ích. –

+0

Đây là "đúng cách" để làm điều này, bởi vì đây là "cách vim". –

2

Bạn có thể sử dụng :vimgrep ví dụ:.

 :vimgrep /pattern/ **/*.py 

Kiểm tra Mẹo Vim này:

Ngoài ra cung cấp cho một cái nhìn để grep.vim, đó là một plugin mà tích hợp các grep, fgrep, egrep, và các công cụ aGrep với Vim và cho phép bạn tìm kiếm một mô hình trong một hoặc nhiều tập tin và nhảy với họ ...

6

Tôi sử dụng grep trực tiếp cho điều đó.

grep -IirlZ "pattern" .|xargs -0 vim 

-I: ignore binary 
-i: ignore case 
-r: recursive 
-l: print file name only 
-Z: print \0 after each file name 
+0

Không hoạt động trên cửa sổ gvim của tôi. – kroiz

5

Bạn có thể muốn kiểm tra :vimgrep:grep trong tài liệu vim. :vimgrep sử dụng chức năng tìm kiếm mẫu của vim và đọc tất cả các tệp thành bộ đệm vim. :grep theo mặc định liên kết đến một bên ngoài grep utlity trên hệ thống của bạn, nhưng bạn có thể thay đổi hành vi bằng cách đặt tùy chọn grepprg. Dưới đây là một liên kết đến tài liệu trực tuyến:

http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep

Có thông tin thêm về điều đó và cũng có một số tùy chọn khác trong mũi vào "Tìm trong các tập tin bên trong Vim" ở Vim Mẹo Wiki:

http://vim.wikia.com/wiki/Find_in_files_within_Vim

0

Bạn có thể tạo chỉ mục mã nguồn bằng cách sử dụng ctags và sau đó VIM có thể use this để điều hướng liền mạch thông qua cơ sở mã của bạn. Đó là mã nguồn nhận thức được rằng bạn có thể chuyển trực tiếp đến các khai báo phương thức, v.v.

Bạn cần phải tạo lại các tệp ctags thường xuyên, nhưng bạn có thể làm điều đó như một phần của quá trình tạo. Nó sẽ được khá nhanh, trừ khi cơ sở mã của bạn là khá lớn.

+0

Điều này giúp tìm tham chiếu biểu tượng như thế nào? –

+0

ctags sẽ lập chỉ mục mã nguồn của bạn (bằng hầu hết các ngôn ngữ). VIM có khả năng điều hướng thông qua chỉ mục ctags, vì vậy bạn có thể định vị chính mình trên bất kỳ biểu tượng nào và sau đó chuyển trực tiếp đến định nghĩa. Ctrl +], tôi nghĩ vậy. –

3

Đặt grepprg thành Ack, sau đó sử dụng :grep để tìm kiếm bằng Ack.

Hoặc sử dụng thẻ ctags.

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