2008-09-15 21 views
14

Tôi đặc biệt quan tâm đến các công cụ có thể được cắm vào Vim để cho phép duyệt theo nguồn kiểu CScope (1-2 lệnh gõ phím để định vị các định nghĩa hàm, người gọi, ký hiệu toàn cục và vv) cho các ngôn ngữ ngoài C/C++ chẳng hạn như Java và C# (vì Vim và Cscope đã tích hợp rất tốt để duyệt C/C++). Tôi không quan tâm đến các công cụ dựa trên IDE vì tôi biết Microsoft và các nhà cung cấp khác đã giải quyết không gian đó - tôi thích sử dụng Vim để chỉnh sửa và duyệt, nhưng không biết các công cụ cho C# và/hoặc Java. sức mạnh tương tự như CScope.Có trình duyệt nguồn kiểu CScope nào cho các ngôn ngữ khác ngoài C/C++ trên Windows không?

Câu trả lời ban đầu cho câu hỏi này bao gồm một con trỏ đến ứng dụng CSWrapper mà dường như sửa lỗi mà một số người dùng tích hợp Vim và CScope. Tuy nhiên, cài đặt Vim/CScope của tôi hoạt động tốt; Tôi chỉ đang cố gắng mở rộng chức năng cho phép sử dụng Vim để chỉnh sửa mã bằng các ngôn ngữ khác.

+0

Đối với trăn: http://stackoverflow.com/questions/3718868/using-cscope-to-browse-python-code-with-vim – idbrii

Trả lời

3

CScope hoạt động với Java.

Từ http://cscope.sourceforge.net/cscope_vim_tutorial.html:

Mặc dù cscope ban đầu chỉ dành cho sử dụng với mã C, nó thực sự là một công cụ rất linh hoạt, hoạt động tốt với các ngôn ngữ như C++ và Java . Bạn có thể coi nó như một cơ sở dữ liệu chung 'grep', với khả năng để nhận dạng các cấu trúc bổ sung nhất định như các cuộc gọi hàm và các định nghĩa biến. Theo mặc định, Cscope chỉ phân tích các tệp C, lex và yacc (.c, .h, .l, .y) trong thư mục hiện tại (và thư mục con, nếu bạn vượt qua cờ -R) và hiện không có cách nào để thay đổi danh sách các phần mở rộng tập tin đó (vâng, chúng ta nên thay đổi điều đó). Vì vậy, thay vào đó bạn phải tạo danh sách các tệp mà bạn muốn phân tích cú pháp và gọi nó là 'cscope.files' (bạn có thể gọi nó là bất kỳ thứ gì bạn muốn nếu bạn gọi 'cscope -i foofile'). Một cách dễ dàng (và rất linh hoạt) để làm điều này là đáng tin cậy thông qua Unix 'find' lệnh:

find . -name '*.java' > cscope.files 

Bây giờ chạy 'cscope -b' để xây dựng lại cơ sở dữ liệu (các -b chỉ xây dựng cơ sở dữ liệu mà không cần khởi chạy GUI Cscope) và bạn có thể duyệt tất cả các biểu tượng trong tệp Java của mình. Rõ ràng có folks ra khỏi đó bằng cách sử dụng Cscope để duyệt và chỉnh sửa số lượng lớn các tệp tài liệu , cho biết trình phân tích cú pháp của Cscope linh hoạt như thế nào.

-1

Đây có thể là những gì bạn đang tìm kiếm:

http://www.vim.org/scripts/script.php?script_id=1783

Bạn cũng có thể bắt chước một số chức năng cscope trong tập tin vimrc của riêng bạn bằng cách sử dụng những hương vị khác nhau của map.

5

Tuyên bố rằng Cscope hỗ trợ Java là cực kỳ căng thẳng. Nó dường như đối xử với một phương thức như một hàm, do đó, không có ý tưởng rằng A.foo(), A.foo (Object) và B.foo() đều khác nhau. Đây là một vấn đề lớn với một cơ sở mã lớn (bao gồm các thư viện của bên thứ ba) với nhiều phương thức có cùng tên. (Tôi đã không nhìn vào nguồn Cscope, nhưng đây là những gì tôi tìm thấy Cscope mới nhất, phiên bản 15.7a-3.3 từ Debian không ổn định.)

Tôi đã thử Cscope trên một dự án Java lớn, và nó không có tất cả đều hữu ích cho tôi do giới hạn này.Thật đáng buồn là chúng ta không thể có được câu trả lời nhanh cho câu hỏi cơ bản như "ai gọi phương pháp này", sử dụng phần mềm tự do ngoài các IDE lớn, nhưng chúng ta cũng có thể chấp nhận nó. (Tôi rất thích nó nếu tôi sai. Tôi muốn giải thích như là bình luận phương pháp và biên dịch lại.)

0

Tôi đồng ý với Andrew - cố gắng để có được phân cấp cuộc gọi cho một phương thức trả về tất cả các cuộc gọi cùng tên, ngay cả khi họ đến từ một lớp khác.

Bạn có thể sử dụng Eclim cắm Eclipse vào VIM

http://eclim.org/

mà supportrs gọi hệ thống phân cấp

http://eclim.org/vim/java/inspection.html#call-hierarchy

3

Một chút muộn để bên đây, nhưng dự án https://github.com/eapache/starscope/ tôi cung cấp một đẹp khuôn khổ để tạo cơ sở dữ liệu cscope cho nhiều ngôn ngữ hơn. Hiện tại nó hỗ trợ Ruby và Go, và Javascript đang được tiến hành. Thêm Java/C# không phải là khó khăn.

Chỉnh sửa: Javascript hiện được hỗ trợ đầy đủ.

+0

Cảm ơn, hãy xem! –

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