2009-09-19 33 views
9

Tôi đang lập trình bằng C++ hoặc Java. Vì vậy, tôi muốn sử dụng trình soạn thảo Vim, vì nó rất linh hoạt. Tôi đã nghe nói rằng tôi có thể cấu hình các biên tập Vim để có thể điTrình chỉnh sửa Vim có rất thông minh không?

  1. từ đối tượng để định nghĩa
  2. từ chức năng để định nghĩa
  3. từ tên lớp để định nghĩa

Đỗ chúng tôi có bất kỳ Vim-er chuyên nghiệp mà có thể cho tôi biết chính xác làm thế nào để cấu hình Vim cho điều đó? Cảm ơn trước.

P.S. Trong trường hợp độc giả sẽ xem xét câu hỏi này không được kết nối với lập trình, tôi sẽ nói rằng đây là cải thiện tốc độ lập trình. Vì vậy, nó là một trợ giúp cho lập trình viên. Vì vậy, xin đừng đóng câu hỏi này.

EDIT: Ngoài ra tôi muốn biết vim hoạt động như thế nào với việc hoàn thành mã và vim có thể gợi ý danh sách các phương thức có sẵn cho đối tượng nhất định? Nếu có, thì tôi cũng muốn biết cách cấu hình các tùy chọn này?

+5

Bởi "chuyên nghiệp Vim-er", bạn có nghĩa là được trả tiền để sử dụng vim? Đó là một công việc tôi rất thích: P –

Trả lời

11

Điều bạn đang tìm kiếm là các thẻ ctags và thẻ/TAGS. Ctags (Tôi khuyên bạn nên dùng Exagsant Ctags) là một chương trình quét các tệp nguồn để nhận dạng và tạo một tệp lập chỉ mục chúng. Sau đó, bạn có thể sử dụng ^] để chuyển đến định nghĩa cho thẻ dưới con trỏ.

Có thể có một số chi tiết bổ sung cần thiết để nói vim cách tìm tệp thẻ; Tôi không chắc chắn họ là ai. Nhưng đó là ý tưởng chung - chạy ctags trên mã nguồn của bạn và sau đó sử dụng ^].

Hoặc, bạn có thể xem GNU Global. Nó phức tạp hơn một chút. Nhưng ctags sẽ thực hiện những gì bạn đã mô tả.

+1

Để báo hiệu vim nơi tệp thẻ là, hãy sử dụng tùy chọn thẻ. Nhập ": help 'tags'" vào vim để biết chi tiết. –

1

Mã hoàn thành trong vim có sẵn như là vim-scripts: http://www.vim.org/scripts/index.php

+1

Với phiên bản 7.0 trở lên, bạn có thể tự động hoàn thành tên và dòng mã trong chế độ chèn bằng tổ hợp phím tắt như ctrl-P, ctrl-N và ctrl-X-ctrl-L. Trợ giúp trực tuyến có tất cả các chi tiết. –

-1

Vâng, công cụ cung cấp chỉ số biểu tượng này được gọi là ctags, và nhiều biên tập viên unix có thể sử dụng nó. vim là tốt đẹp trên dòng lệnh, nhưng tôi muốn đề nghị dành một chút thời gian làm quen với KATE. Đó là một trình soạn thảo GUI rất đẹp, hiện đại, với trình duyệt tập tin giống như IDE, đánh dấu cú pháp tốt, wordwrapping năng động đẹp nhất mà tôi từng sử dụng, vv Đối với java, eclipse và netbeans có lẽ đáng xem.

2

Vim không có bóng dáng nghi ngờ, trình chỉnh sửa tốt nhất trên thế giới (Hãy để tôi làm quen với các em). Cuộc chiến tranh lửa sang một bên, những gì tôi đã tìm thấy cực kỳ hữu ích cho cả hai C + + và lập trình Java là nhật thực (IDE tốt nhất trên thế giới, có bây giờ tôi đang chọc Netbeans) với các plugin vrapper. Bạn nhận được tất cả những lợi ích của một môi trường phát triển tích hợp đầy đủ và sức mạnh của các phím tắt vim.

Vrapper không cung cấp cho bạn mô phỏng vim đầy đủ nhưng bạn có thể trả lại mã của bạn bằng cách sử dụng các phím tắt vim và bạn không mất bất kỳ sự tốt lành nào của nhật thực.

+1

Đối với các giá trị khác nhau của "tốt nhất" ... –

+0

Nó thực sự cho các giá trị khác nhau của "thế giới" nhưng tôi thấy quan điểm của bạn! –

1

ctags nói chung là câu trả lời, như Michael E. nói. ctags *.c *.h là một khởi đầu đơn giản cho một dự án có tất cả các tệp trong một thư mục. Sau đó, như Michael đã nói, bạn có thể sử dụng ^] để đi đến định nghĩa và^T để quay lại nơi bạn đến. Đây là những phím bạn dùng để di chuyển xung quanh bên trong sự giúp đỡ của Vim.

Trong Java và C++, bạn có thể có nhiều phương thức có cùng tên. :tn sẽ chuyển sang bước tiếp theo và :ts sẽ liệt kê các lựa chọn thay thế.

Để hoàn thành mã bằng Vim, tôi thường sử dụng^P và^N. Nó không phải là ngữ cảnh nhạy cảm như tương đương trong Eclipse hoặc MSVC, nhưng nó thường thực hiện công việc.

Các công cụ khác mà bạn có thể xem xét sử dụng là cscope và (tất nhiên) Emacs hoặc Eclipse.

1

Như những người khác đã nói, bạn cần tạo tệp chỉ mục cho vi (m).

Tôi chỉ muốn nói rằng sử dụng vim để lập trình Java thay vì IDE hiện đại, giống như sử dụng vim cộng với máy tính thay vì bảng tính cho số. Cả hai đều là ok cho các nhiệm vụ nhỏ, nhưng khi mở rộng quy mô bạn đạt đến một điểm mà bảng tính chỉ để lại trình soạn thảo văn bản phía sau.

Nếu bạn lập trình java để kiếm sống, hãy tự mình và chủ nhân của bạn một ưu tiên và học cách sử dụng một công cụ quyền lực.

+3

vim 7.2 hỗ trợ số dấu chấm động, vì vậy không cần thiết cho máy tính :) – intuited

+1

Thú vị. Tôi chỉ đơn giản là không thể đoán những gì một biên tập viên cần số điểm nổi cho, vì vậy có lẽ đây chỉ là một bước hướng tới việc có một quảng cáo đặc biệt, không chính thức quy định, lỗi-ridden, chậm thực hiện một nửa của Common Lisp? –

2

Sử dụng ctags chắc chắn là nơi để bắt đầu, nhưng đừng quên cscope. Trong cả hai trường hợp, trước tiên bạn có cscope và ctags quét các tệp nguồn của bạn và tạo cơ sở dữ liệu của chúng trước khi bạn bắt đầu vim. Bạn cũng cần phải thỉnh thoảng làm mới cơ sở dữ liệu khi mã của bạn phát triển và thay đổi.

Với ctags, chỉ cần sử dụng lệnh "ctags" trong thư mục mã của bạn. Nếu bạn có một heirarchy của thư mục, bắt đầu từ đầu và sử dụng "ctags -R" để recurse thông qua tất cả các thư mục dưới đây. Bắt đầu vim trong cùng thư mục với tập tin thẻ kết quả và vim sẽ tìm và tải nó tự động. Khi trong trình chỉnh sửa với con trỏ trên một hàm hoặc tên biến, bạn có thể nhập '^]' và vim sẽ chuyển sang định nghĩa.

Tương tự, với cscope, hãy sử dụng "cscope -b" hoặc "cscope -b -R" để nhận thêm thông tin thẻ chi tiết. Vim và cscope làm việc cùng nhau để cung cấp cho bạn nhiều thông tin hơn như là nơi một định danh được sử dụng và từ đó một hàm được gọi. Có một tập các macro có thể được sử dụng để truy cập thông tin. Bạn có thể tìm thấy các macro và ý nghĩa của chúng trong thông tin trợ giúp vim cscope.

2

Lần trước tôi đã kiểm tra, một thời gian dài trước đây, ctags vẫn ổn, nhưng nó bị mất một số mã nhận dạng và cscope có tùy chọn tìm kiếm đầy đủ hơn nhưng vẫn bỏ sót một số mã nhận dạng.

grep là những gì tôi thích. Đó là đầy đủ nhưng vẫn khá nhanh nếu cơ sở mã nguồn là một kích thước hợp lý hoặc máy tính nhanh. Bạn có thể gọi nó từ vim với :grep. Đây là một phiên bản đơn giản của riêng tôi _vimrc để hiển thị như thế nào tôi có nó được cấu hình. Tôi đặt bình luận để giải thích chìa khóa làm gì.

" for Windows, replace with the location of `grep.exe' 
" not needed for Unix/Linux 
:set grepprg=c:\prog\cygwin\bin\grep.exe\ -n\ $*\ /dev/null 


:function! RecursiveSearchIdentifierUnderCursor() 
: sp 
: let grep_cmd = "silent grep -r \"\\<" . expand("<cword>") . "\\>\" *" 
: exe grep_cmd 
:endfunction 


" CTRL-backslash to search for the identifier (or "word") under the cursor 
" 
" an identifier is in the form "xxx_123_yyy" but something in the form 
" "xxx_123_yyy.aaa_999" would be two identifiers separated by a period 
" 
" 
" this basically executes: 
" 
"  :grep -r "\<identifier\>" * 
" 
" for whatever `identifier' the cursor happens to be over 
" 
" 
" to close the newly opened window, use: 
" 
"  :q 
" 
:map <C-\> :call RecursiveSearchIdentifierUnderCursor()<CR> 


" cursor up/down to move to the previous/next search result 
:map <Up> :cp<CR>zz 
:map <Down> :cn<CR>zz 


" jump up/down between horizontally split windows 
:map <PageUp> <C-W>k 
:map <PageDown> <C-W>j 


" move to the previous/next enclosing brace 
:map <Left> [{ 
:map <Right> ]} 


" move to the previous/next enclosing parenthesis 
:map <Home> [(
:map <End> ]) 


" move to the previous/next enclosing # preprocessor directive 
:map <Insert> [# 
:map <Del> ]# 

Ngoài ra, đừng quên * (SHIFT-8) và # (SHIFT-3) để tìm kiếm tới lui cho các định danh hiện dưới con trỏ trong file hiện hành. Tôi đã tìm thấy những điều này vô giá khi nhảy quanh mã, đặc biệt khi tìm kiếm các tên biến ngắn như 'i' và 'j' nếu không sẽ khớp các phần của các tên biến khác trong tìm kiếm mù trong trình soạn thảo văn bản thông thường.

Bạn cũng có thể gọi :make từ vim nếu bạn muốn sử dụng make. Nó sẽ dừng lại trên lỗi biên dịch đầu tiên, sau đó bạn có thể chỉnh sửa và bắt đầu xây dựng lại từ bên trong vim.

Khi bạn cảm thấy thoải mái khi xác định các chức năng và ánh xạ chính của riêng mình, có rất nhiều cách để thực hiện các tác vụ lập trình lặp lại dễ dàng hơn với vim.

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