2010-12-28 27 views
6

Tôi yêu tiện ích tìm kiếm mã ack. Nó đủ thông minh để xem qua Makefiles, nhưng không biết về các tệp SConstruct và SConscript mà scons sử dụng. Làm cách nào để thêm những tệp đó vào các tệp mà ack sẽ xem?Thêm các tệp SCON vào các tìm kiếm ack

Trả lời

2

Điều này không thể thực hiện được bằng cách sử dụng bộ loại của ack. Makefiles and Rakefiles are hard-coded trong nguồn. Tôi nghĩ bạn có thể thêm loại scons bằng cách sửa đổi $HOME/.ackrc và thêm --type-set=scons=SConstruct,SConscript, nhưng điều đó sẽ tìm kiếm tệp kết thúc bằng ".SConstruct" hoặc ".SConscript".

Cách giải quyết đơn giản nhất là thêm cờ -a (tất cả các loại tệp) vào ack.

Nếu bạn chỉ muốn tìm kiếm và có thể lọc SConstruct bằng cách nào đó, thì bạn có thể thêm #!/usr/bin/python làm dòng đầu tiên của tệp SConstruct. Sau đó, Ack sẽ xử lý tệp dưới dạng mã nguồn python và bạn có thể lọc bằng --python.

+0

Điều đó dường như chỉ hoạt động đối với các tệp .scons, không phải SConstruct hoặc SConscript. – jblocksom

+0

Gah, bạn nói đúng. Chỉ cần kiểm tra mã nguồn - "makefile" và "rakefile" là các ngoại lệ được mã hóa cứng. – richq

+0

Cảm ơn bạn đã tìm kiếm điều đó. Tôi đã có thể sửa đổi phiên bản địa phương của tôi để thêm SConstruct và SConscript trong cùng một cách makefiles đang ở trong đó, có lẽ tôi sẽ gửi một bản vá. Tôi phải nói rằng tôi không điên về quyết định thiết kế scons để sử dụng các tập tin w/out mở rộng, mặc dù tôi đã nhìn thấy các hệ thống xây dựng khác mà làm như vậy. – jblocksom

3

Đây là một bản vá mà đối xử với file SCons thích làm cho các tập tin:

--- ~/bin/ack-old 2011-06-01 15:43:51.000000000 -0600 
+++ ~/bin/ack  2011-06-01 15:42:09.000000000 -0600 
@@ -1583,6 +1583,8 @@ 

    return 'skipped' unless is_searchable($basename); 

+ return ('python',TEXT)  if $basename eq 'SConstruct' || $basename eq 'SConscript'; 
+ 
    my $lc_basename = lc $basename; 
    return ('make',TEXT)  if $lc_basename eq 'makefile' || $lc_basename eq 'gnumakefile'; 
    return ('rake','ruby',TEXT) if $lc_basename eq 'rakefile'; 
+0

Tôi đang chạy gói deb của ack phiên bản 1.92 trên Ubuntu 10.04 và bản vá tương tự có thể được áp dụng theo cách thủ công vào /usr/share/perl5/App/Ack.pm tại dòng 476. –

1

Một mới ack2 đang được phát triển mà sẽ cho phép kết hợp tập tin chính xác trong file .ackrc. Điều đó sẽ cho phép hỗ trợ Scons và Jam dễ dàng hơn.

+0

Xem http: // stackoverflow. com/questions/9508431/ack-binding-an-fact-file-name-to-a-filetype để biết thêm về điều này. –

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