Có thể có vim tự động hoàn thành tên hàm, biến, v.v. khi sử dụng nó để lập trình không?


56

Nhiều IDE tự động hoàn thành tên hàm, biến, tên phương thức, v.v. như kiểu người dùng. Những cái tốt nhất hoàn thành các tên dựa trên cả thư viện tích hợp của ngôn ngữ cũng như những gì đã được xác định trong các tệp khác của cùng một chương trình.

Ví dụ, khi tôi đang gõ chương trình Python sau:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

dòng eatFsẽ tự động hiển thị eatFood()dưới dạng tùy chọn tự động hoàn thành có sẵn.

Vim có khả năng này không? Nếu vậy, làm thế nào tôi có thể kích hoạt nó?

Câu trả lời:


42

Có nhiều hương vị khác nhau của tự động hoàn thành trong vim. Một cách có thể là sử dụng SuperTab . Điều này cung cấp một cách để sử dụng hoàn thành tab nhiều hơn hoặc ít hơn bất cứ lúc nào. Điều này sẽ cho phép bạn nhấn Tabsau khi bạn đã gõ một phần từ để có danh sách hoàn thành. Chẳng hạn, gõ eatFtheo sau Tabđể mở rộng sangeatFood.

Xin lưu ý : những hình ảnh này đều liên kết đến ví dụ gifs đang hoạt động.

hoàn thành supertab

Vim có những lựa chọn tuyệt vời khác. Bạn nên đọc :h ins-completionđể thấy sự đa dạng của các tùy chọn hoàn thành tích hợp. Sử dụng vim's Ctrl- XCtrl- O, kết hợp với plugin nhận biết python như jedi có thể mang lại hương vị hoàn chỉnh. Jedi có thể được cấu hình để cung cấp tài liệu về hoàn thành omni (đây là những gì Ctrl- XCtrl- Ohiện). Sau đó, tài liệu cho các ứng cử viên hoàn thành sẽ xuất hiện trong một cửa sổ chia.

hoàn thành ctrlxctrlo

Sử dụng các plugin tương tự nhưng các tùy chọn khác nhau dẫn đến tất cả các loại hành vi. Chẳng hạn, có thể không cần phải nhắc tự động hoàn thành (nếu đó là những gì bạn đang theo đuổi). Thay vào đó, sau khi bạn nhập một số lượng chữ cái (giả sử là 2 hoặc 3) của một từ, một plugin có thể cố gắng cung cấp thông minh các cách hoàn thành có thể trong một menu một cách thông minh.

nhập mô tả hình ảnh ở đây

Vì vậy, câu trả lời ngắn gọn là có! Nhưng quá trình cấu hình có thể hơi phức tạp. Tôi nghĩ về nó như một bước trong cầu thang dài làm chủ vim.


Tôi đã thử tất cả và tôi luôn quay trở lại SuperTab, đó là cách ít xâm phạm nhất.
craigp 4/2/2015

1
Tôi cũng thực sự thích plugin YouCompleteMe, vì nó gợi ý loại bạn và bạn có thể chọn hoặc bỏ qua các đề xuất. Vâng, trực quan rất khó để bỏ qua, nhưng nó rất không quan trọng trong quy trình làm việc của tôi vì nó đòi hỏi ít nét chính hơn.
Phát triển

3
Tôi đã thay đổi hình động thành "nhấp chuột", theo nghĩa là chúng được liên kết với hình động gif.
davidlowryduda

1
Tôi không thể sử dụng YouCompleteMe trên máy tính làm việc của mình vì tôi không có root để cài đặt các phụ thuộc, SuperTab là lựa chọn tốt nhất tiếp theo.
Charles Clayton

@mixedmath Trong trường hợp của tôi superTab không hoạt động.
alrcal

24

Chức năng như vậy - tức là, tìm kiếm tệp hiện tại (và tất cả các tệp đang mở) để tự động hoàn thành, phải được bật theo mặc định với Ctrl+P:

ảnh chụp màn hình tự động hoàn thành trong sử dụng

Bạn có thể đi đến gợi ý n ext với Ctrl+N, gợi ý p revious với Ctrl+Pvà chọn nó bằng cách nhập bất kỳ chữ cái nào (sẽ được thêm vào ngay sau gợi ý).


1
Gửi tới biên tập viên (Jasper): Tôi có nhiều khả năng muốn viết lại một cái gì đó mà tôi đã viết gần đây, không phải là thứ tôi sẽ viết trong tương lai hoặc đó là ở phần đầu của tệp. Do đó, ^PIMHO tự nhiên hơn. Nếu không, cảm ơn vì đã chỉnh sửa (Tôi hy vọng tôi đã nhấp vào nút bên phải và bạn đã có +2).
yo '

1
Đúng, tôi có những điểm internet tưởng tượng đó :) Tôi luôn nghĩ rằng danh sách gợi ý sẽ được sắp xếp theo thứ tự abc ...
Jasper

@Jasper thứ tự xuất hiện là nó (ít nhất là đối với tôi chắc chắn, cũng thấy ở trên: world,word,woodvà không phải là cách khác xung quanh). Vì vậy, ^Plà việc hoàn thành đã qua sử dụng cuối cùng, đó là rất tiện dụng (tôi hiếm khi đi xa hơn so với 3 mục trong danh sách, thậm chí trong một tập tin dài).
yo '

inoremap <C-Space> <C-N>
protip

20

Vim có hỗ trợ hoàn thành tự nhiên. Bạn có thể đọc về các cách hoàn thành khác nhau mà Vim hỗ trợ :h ins-completion.

Nói chung, đối với tất cả các mục đích tôi đã tìm thấy, hoàn thành không đủ theo ý thích của tôi, tuy nhiên, có một số plugin hoàn thành bổ sung thêm giá trị vượt ra ngoài những gì hoàn thành cung cấp. NeoComplete , YCM (YouCompleteMe) là một số ít cho cùng. Chúng tiên tiến hơn theo nghĩa là chúng cố gắng kết hợp các loại hoàn thành khác nhau chính xác hơn và chúng cũng có các cơ chế bộ đệm nâng cao, vì vậy chúng có xu hướng nhanh hơn. YCM thậm chí còn đi đến mức làm việc với các trình biên dịch / tiện ích bên ngoài để cung cấp IntelliSense tốt hơn.


9

Có, kịch bản hoàn thành tự động cho vim tồn tại. Sự lựa chọn "tốt nhất" là tùy thuộc vào ngôn ngữ lập trình của bạn. Vì mã ví dụ của bạn là Python, tôi đề nghị hãy xem Jedi . Xây dựng trên đó Bạn hoàn thành tôi tồn tại, cũng có hỗ trợ cho các ngôn ngữ khác, nhưng đôi khi được coi là quá lớn. Đối với các ngôn ngữ khác, bạn có thể duyệt qua các tập lệnh vim dài .


7

Trong chế độ chèn, nhập một vài ký tự đầu tiên của một từ, sau đó nhấn:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Điều này đặc biệt hữu ích khi nhập tên của các biến trong một chương trình.

Tùy chọn 'hoàn thành' kiểm soát nơi các từ khóa được tìm kiếm (bao gồm các tệp, tệp thẻ, bộ đệm và hơn thế nữa).

Tùy chọn 'hoàn thành' kiểm soát cách thức hoàn thành xảy ra (ví dụ: liệu menu có được hiển thị hay không).

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.