Đây là một câu hỏi cũ, nhưng tôi cứ tiếp tục quay lại với nó với một tia hy vọng mờ dần, nghĩ rằng một ngày nào đó tôi sẽ tìm thấy sự kết hợp đúng đắn của các plugin để cho tôi tự động hoàn thành trong Vim. Việc tìm kiếm vẫn tiếp tục, nhưng đây là tất cả các nghiên cứu tôi đã thực hiện trong suốt nhiều năm.
Trước hết, bạn phải hiểu Vim là một trình soạn thảo văn bản, không phải là một trình soạn thảo mã. Trình chỉnh sửa mã, IDES, là các công cụ như bộ công cụ Jetbrains, Visual Studio Code, Eclipse, v.v.
Về cơ bản, Vim không thể "tự động hoàn thành" mã. Tự động hoàn tất yêu cầu xem xét mã nguồn của bạn và phân tích AST. Hãy xem xét rằng Vim không thể thực hiện các hoạt động không đồng bộ cho đến khi Vim 8 được phát hành vào năm 2016, do đó, việc cố gắng chạy bất kỳ loại phần mềm giới thiệu mã nào trong plugin Vim sẽ là một cơn ác mộng. Nó bị cuốn vào lịch sử của hệ sinh thái Vim không làm điều này. Và tất cả những người cố gắng làm điều này, như Tern For Vim, thực sự là những cơn ác mộng để sử dụng.
Điều tốt nhất mà một trình soạn thảo văn bản có thể làm là đoạn trích và hoàn thành các từ / dòng / vv mà nó biết. Nếu bạn đang tìm cách tự động hoàn tất mã, bạn nên sử dụng trình chỉnh sửa mã chứ không phải trình soạn thảo văn bản.
Đây là những lựa chọn của bạn, trong đó tôi đã thử tất cả:
Hai phím tắt hữu ích là Ctrl- n, sẽ tự động hoàn thành một từ chỉ dựa trên bộ đệm hiện tại bạn đã mở (không có nội dung mã) và Ctrl- xCtrl- lsẽ tự động hoàn thành một dòng mã đầy đủ nếu bạn muốn sao chép một dòng mã. Bạn có thể biết Ctrl- xCtrl- f, sẽ tự động hoàn thành một tên tệp bao gồm đường dẫn, liên quan đến hiện tại :pwd
. Các mẫu động hoàn tất plugin có thể được nhẹ hữu ích nếu bạn không tìm kiếm với /\v
.
Được xây dựng trong Vim " Omnicompletion " được kích hoạt bởi Ctrl- x, Ctrl- o(đó là những gì tác giả Vim muốn bạn nhập mỗi lần) cùng với một loạt các plugin cụ thể về ngôn ngữ , nếu chúng tồn tại. Bạn có thể :echo &omnifunc
trong một tệp để xem nếu bạn đã cài đặt Omnicompletion bởi Vim trong tệp bạn chọn.
AutoComplPop để tự động mở menu Omnicompletion ở trên khi gõ.
SuperTab cho phép bạn nhấn Tabđể kích hoạt hoàn thành tích hợp sẵn của Vim.
NeoComplCache là hoàn thành từ khóa (không khác biệt với hoàn thành tích hợp sẵn của Vim không được chỉ định), .vimrc
thiết lập phức tạp và NeoSnippet để hoàn thành đoạn trích.
Một sự kết hợp quái vật của exuberant-ctags
và DoctorJS
(một dự án Mozilla đã chết trong một năm), TagBar và một thứ được trồng tại nhà để trích xuất hoàn thành từ các tệp thẻ.
SnipMate , một plugin hoàn thành thẻ cơ bản, cùng với các đoạn mã và tự mình tìm ra cách thêm đoạn mã, vì nó hơi khó.
UltiSnips cùng với UltiSnips-Snippets là khác nhau hơn so với đoạn trên.
Tern for Vim , một thư viện đầy hứa hẹn thực hiện nội suy mã thực tế để tự động hoàn thành chính xác. Tuy nhiên, đó là lỗi, rất chậm, có rò rỉ bộ nhớ sẽ làm sập Vim và có thể là từ bỏ phần mềm.
YouCompleteMe , một kiểu hoàn thành mờ như bạn chạy một máy chủ ở chế độ nền, cùng với chức năng được phát triển tại nhà để hoàn thành đoạn trích.
Eclim - một nỗ lực cao cả để chạy một máy chủ Eclipse trong nền và nói với Vim về sự tự động hoàn thành mà nó hướng nội khi đang di chuyển. Nó hoạt động tốt như Tern.
Cuối cùng, Closetag hoặc delimitMate hoặc Tự động đóng hoặc một bananagram cây nhà lá vườn để tự động đóng cửa của thẻ và ngoặc tự động trên gõ.
Hầu như mọi plugin trong danh sách này sẽ xung đột với hầu hết các plugin khác trong danh sách này.
YouCompleteMe dường như là người dẫn đầu gói, nhưng tôi chưa bao giờ có thể làm cho nó hoạt động chính xác khi hoàn thành thẻ và việc hoàn thành mã hóa nội bộ của nó vẫn chưa chứng minh được sức mạnh.
Ý kiến cá nhân của tôi là tình trạng hiện tại của thế giới tự động hoàn thành Vim đang ở trong tình trạng xấu. Đối với các dự án nhỏ, bạn có thể ổn khi sử dụng một trong các giải pháp trên. Nếu bạn đang xử lý một API đơn giản, bạn có thể giữ phần lớn trong đầu, việc hoàn thành không thâm nhập mã có thể sẽ ổn. Nếu bạn đang làm việc với một dự án lớn, hoặc cần lợi ích của an toàn kiểu trong khi lập trình, một IDE đầy đủ ( Eclipse , Visual Studio , WebStorm ) sẽ phù hợp với bạn hơn nhiều so với Vim.
Dĩ nhiên, nhược điểm của IDE là bạn sẽ không còn sức mạnh của Vim trong tay nữa. Tôi chưa sử dụng một IDE duy nhất có chế độ Vim chấp nhận được.
Vim có sự thiên vị ngôn ngữ vừa phải đối với các ngôn ngữ giống như C, và nếu không có kỳ vọng rằng bất kỳ tính năng cụ thể nào về ngôn ngữ sẽ được người dùng thêm vào dưới dạng bổ trợ. Thật không may, điều này đã dẫn đến một hệ sinh thái tự động hoàn thành. Một số tùy chọn là phong nha, nhưng không có gì là hoàn hảo, và hiếm khi có một nhà lãnh đạo đa số / thực hành tốt nhất.
let g:acp_behaviorSnipmateLength=-1
xem:help autocomplpop
) bạn có nghĩa vụ phải thêm vào .vimrc của mình, bạn đã thêm nó chưa?