Làm thế nào để bạn điều hướng các tệp nguồn lớn với VIM?


7

Đầu tiên, tôi không hỏi về hiệu suất. Tôi đang tìm kiếm thứ gì đó sẽ giúp tôi, về mặt tinh thần, có được các tệp mã nguồn C lớn mà tôi không quen thuộc. Lấy ví dụ readelf.c. Tập tin này là 20.000 dòng. Tôi có thể đọc mã và hiểu ý nghĩa của nó, nhưng tôi thì không. Đây chỉ là một vấn đề trong kinh nghiệm của tôi với C. Vì một số lý do, trong C kích thước tệp là vô cùng lớn và readelf.ckhông đơn độc trong việc này. Có bất cứ điều gì có thể ảo hóa một tệp C thành một thứ gì đó lành mạnh như một dự án có cấu trúc không - tôi biết đó là yêu cầu rất nhiều, nhưng dường như với tất cả các mã C tồn tại, ai đó sẽ làm điều gì đó tương tự.

Thiết bị đầu cuối của máy tính xách tay của tôi có thể chứa ~ 50 dòng. Những công cụ và plugin nào mà vim cung cấp để giúp điều hướng các tệp vượt quá 10k nhưng dưới 100k dòng?


5
Việc gấp mã có thể giúp ích phần nào, cùng với các thẻ
D. Ben Knoble

1
bạn có thể thử tagbar . Xem ảnh chụp màn hình nó được cung cấp trong trang. Sau đó, bạn có thể điều hướng các chức năng, cấu trúc được xác định trong một thanh bên.
Liu Sha

@LiuSha đó chính xác là những gì tôi đang tìm kiếm, nếu bạn muốn đưa ra câu trả lời tôi sẽ chấp nhận nó.
Evan Carroll

Câu trả lời:


4

Tôi nghĩ những gì bạn đang tìm kiếm là một plugin như tagbar , có thể tạo một thanh bên để hiển thị tất cả các chức năng, struct / class, macro, v.v. Nó cũng cho phép bạn nhấp (hoặc nhấn enter) thẻ và sau đó nhảy đến định nghĩa.


3

Bạn có thể kích hoạt tính năng gấp mã bằng tùy chọn vim: set foldmethod=syntax Điều này làm giảm số lượng mã bạn nhìn thấy cùng một lúc và làm cho nó có thể quản lý được. Sau khi bật mã gấp, hãy sử dụng các lệnh bên dưới để mở và đóng nếp gấp: Các lệnh zc (đóng), zo (mở) và za (chuyển đổi) hoạt động trên một cấp độ gấp, tại con trỏ. Các lệnh zC, zO và zA tương tự nhau, nhưng hoạt động ở tất cả các cấp độ gấp (ví dụ: dòng con trỏ có thể nằm trong một nếp gấp mở, nằm trong một nếp gấp mở khác, gõ zC sẽ đóng tất cả các nếp gấp tại con trỏ).

Lệnh zr giảm gấp bằng cách mở thêm một cấp độ gấp trong toàn bộ bộ đệm (vị trí con trỏ không liên quan). Sử dụng zR để mở tất cả các nếp gấp.


1

Một cái gì đó mà tôi đang làm là sử dụng

  • Plugin Gutentags: Được sử dụng để tạo thẻ trên toàn dự án từ thư mục gốc.
  • Plugin Tagbar: Được sử dụng để điều hướng trong các tập tin.
  • Plugin Ack: Được sử dụng để tìm kiếm trong toàn bộ dự án.

Bạn có thể tìm thấy toàn bộ thiết lập của tôi @ ở đây


1

Ngoài các plugin dựa trên ctags như Taglist tôi còn sử dụng cscope . Một số plugin có thể hữu ích: như cscope_macrosCCTree . Trước khi sử dụng ctags hoặc cscope, bạn phải tạo tệp thẻ và cơ sở dữ liệu cscope, xem các liên kết ở trên. Mặc dù các công cụ này khá cũ, nhưng chúng chỉ hoạt động tốt với nhiều triển khai C hiện đại.

Cũng đừng quên đánh dấu bạn có thể đặt vào nơi quan trọng, gấp phần không mong muốn, gD, *, ]]và chuyển động tương tự. Nếu bạn không muốn sử dụng bất kỳ chương trình hoặc plugin bên ngoài nào, bạn có thể nhận được một số bản xem trước của tệp bằng cách này

:set foldmethod=syntax
zM

foldmethodđặt gấp dựa trên cú pháp C (bạn có thể viết nó bằng .vimrc) và zMlệnh (ở chế độ bình thường) gấp mọi thứ ở mức tối đa.

Để biết thêm thông tin xem:

:help tags
:help ctags
:help cscope
:help mark-motions
:help folding

1

Tagbar có thể giúp điều hướng qua một số lượng lớn các chức năng trong một tệp duy nhất. Trong số các tính năng khác, nó hỗ trợ sắp xếp theo tên hoặc số dòng, điều mà tôi thấy rất hữu ích.

markscũng có thể là một trợ giúp tuyệt vời trong việc điều hướng qua lại trong một tệp lớn. Xem :h markshoặc http://vimdoc.sourceforge.net/htmldoc/motion.html#mark để biết thêm chi tiết.

Nếu bạn thấy cần phải liên tục chuyển giữa nhiều tệp (lớn), Gtags có thể giúp bạn trong việc tìm định nghĩa / tham chiếu trong toàn dự án.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.