Điều hướng các dự án mã mà không sử dụng các lệnh bên ngoài


9

Tôi đang cố gắng thu thập một hộp công cụ của các lệnh / truy vấn Vim, trong chế độ lệnh hoặc tìm kiếm, để điều hướng một cơ sở mã mà không sử dụng Ctags hoặc các công cụ bên ngoài khác. Ctags rất tuyệt nhưng sự hỗ trợ có thể thay đổi tùy thuộc vào môi trường phát triển mà bạn đang mắc kẹt. Tôi chỉ muốn dựa vào kiến ​​thức của Vim.


4
Có lẽ bạn nên nói "công cụ bên ngoài" thay vì "ctags", bởi vì gợi ý đầu tiên của tôi sẽ là cscope.
muru

1
Một điều mà tôi sử dụng là lệnh gd. Điều này đưa con trỏ đến khai báo cục bộ của biến dưới con trỏ.
nitishch

@muru Tôi không muốn sử dụng bất kỳ công cụ bên ngoài nào. Những gì tôi đang cố gắng học là các kỹ thuật để điều hướng hiệu quả một cơ sở mã chỉ bằng cách sử dụng các lệnh Vim. Tôi biết nó có thể được thực hiện, nhưng rõ ràng đòi hỏi kiến ​​thức Vim sâu hơn tôi có. Có thể không phải là một câu hỏi SE hay vì nó quá mở nhưng tôi không biết tìm ở đâu nữa.
user1332148

Câu trả lời:


11

"Bao gồm tìm kiếm" là một trong những công cụ như vậy:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

Liên quan đến "bao gồm tìm kiếm", "tìm kiếm định nghĩa" cũng thú vị:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

Cả hai công cụ đều phụ thuộc vào nhiều tùy chọn khác nhau có thể được thiết lập bởi các plugin filetype của bạn.

Xem :help include-search.


Bạn cũng có thể sử dụng gdgDnhư các phiên bản nhẹ của [D]D.

Xem :help gd.


Trong bộ đệm hiện tại, lệnh dưới đây sẽ liệt kê mọi định nghĩa hàm và số dòng của nó:

:g/func/#

Xem :help :g.


:grep:vimgrepcũng hữu ích, nếu chỉ vì kết quả của chúng được đưa vào danh sách quickfix có thể được điều hướng cùng với :cn, :cpvà được hiển thị trong cửa sổ quickfix rất tiện dụng.

Xem :help :grep, :help :vimgrep:help quickfix.


Nói về danh sách QuickFix / cửa sổ, tôi đã viết chức năng này (dựa trên công việc của những người khác) để hiển thị các kết quả [I, ]I, :ilist, [D, ]D:dlisttrong danh sách QuickFix / cửa sổ. YMMV tất nhiên.


Mặc dù không hoàn toàn là một công cụ điều hướng, tôi thấy cửa sổ xem trước rất hữu ích để xem chữ ký của chức năng tôi đang làm việc.

Xem :help preview-window.


Mà nói…

Vim không biết gì về mã của bạn ngoài một vài mẫu biểu thức chính quy có thể phù hợp hoặc không phù hợp với phong cách mã hóa của bạn hoặc bất cứ điều gì. Điều này có nghĩa là điều hướng mã được thực hiện tốt hơn với sự trợ giúp của các công cụ bên ngoài như ctags, cscope hoặc GNU GLOBAL.


5

Có rất nhiều cách để điều hướng qua mã (bao gồm trong Vim và bên ngoài), tôi vẫn khám phá chúng. Những gì tôi sử dụng trong công việc hàng ngày là:

  • Làm mờ văn bản trong các tệp dự án và điều hướng qua cửa sổ quickfix (Tôi sử dụng trình tìm kiếm bạc để greping).
  • Sử dụng các plugin liên quan đến ngôn ngữ, tôi biết có các plugin cho javascript, ruby, go, cho phép chuyển giữa các mô-đun của chương trình (trong plugin javascript là gf-command
  • Ctrl+O, Ctrl+I- nhảy lùi hoặc chuyển tiếp trong "lịch sử" điều hướng
  • g; - nhảy vào vị trí được chỉnh sửa lần cuối trong tệp
  • Sử dụng nhãn hiệu để đặt "dấu trang" trên các vị trí cụ thể. Bạn có thể đặt dấu bằng '[some_letter]lệnh, nếu chữ cái là chữ hoa thì bạn sẽ nhận được dấu có thể truy cập được từ bất kỳ tệp (bộ đệm) nào.
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.