Ini adalah pertanyaan lama, tetapi saya terus kembali ke sana setiap saat dengan secercah harapan memudar, berpikir bahwa suatu hari saya akan menemukan kombinasi plugin yang tepat untuk memberi saya pelengkapan otomatis yang sempurna di Vim. Pencarian berlanjut, tetapi ini semua penelitian yang telah saya lakukan selama beberapa tahun.
Pertama-tama, Anda harus mengerti Vim adalah editor teks, bukan editor kode. Editor kode, IDES, adalah alat-alat seperti seperangkat alat Jetbrains, Visual Studio Code, Eclipse, dll.
Vim pada dasarnya tidak dapat "autocomplete" kode secara akurat. Pelengkapan otomatis memerlukan introspeksi kode sumber Anda dan menganalisis AST. Pertimbangkan bahwa Vim tidak dapat melakukan operasi asinkron hingga Vim 8 dirilis pada tahun 2016, jadi mencoba menjalankan segala jenis perangkat lunak introspeksi kode dalam plugin Vim akan menjadi mimpi buruk. Ini dimasukkan ke dalam sejarah ekosistem Vim untuk tidak melakukan ini. Dan semua yang mencoba melakukan ini, seperti Tern For Vim, memang mimpi buruk untuk digunakan.
Editor teks terbaik yang bisa dilakukan adalah potongan dan melengkapi kata / baris yang sama / etc tahu tentang itu. Jika Anda mencari kode pelengkapan otomatis, Anda harus menggunakan editor kode, bukan editor teks.
Ini adalah opsi Anda, yang telah saya coba semuanya:
Dua pintasan keyboard yang bermanfaat adalah Ctrl- n, yang akan melengkapi kata secara otomatis hanya berdasarkan buffer yang sudah Anda buka (tanpa introspeksi kode), dan Ctrl- xCtrl- lyang akan melengkapi secara otomatis satu baris penuh kode jika Anda ingin menduplikasinya. Anda mungkin tahu Ctrl- xCtrl- f, yang akan secara otomatis melengkapi nama file termasuk path, relatif terhadap arus :pwd
. The pola lengkap Plugin dapat sedikit berguna jika Anda tidak mencari dengan /\v
.
Dibangun pada Vim " Omnicompletion " yang dipicu oleh Ctrl- x, Ctrl- o(itulah yang penulis Vim ingin Anda ketikkan setiap waktu) bersama dengan sekelompok plugin khusus bahasa , jika ada. Anda dapat :echo &omnifunc
dalam file untuk melihat apakah Anda sudah memiliki Omnicompletion yang diatur oleh Vim di file pilihan Anda.
AutoComplPop untuk secara otomatis membuka menu Omnicompletion di atas saat mengetik.
SuperTab yang memungkinkan Anda menekan Tabuntuk memicu penyelesaian bawaan Vim.
NeoComplCache yang merupakan penyelesaian kata kunci (perbedaannya dengan penyelesaian bawaan Vim tidak ditentukan), .vimrc
pengaturan yang rumit , dan NeoSnippet untuk penyelesaian cuplikan.
Kombinasi monster dari exuberant-ctags
dan DoctorJS
(proyek Mozilla yang telah mati selama setahun), TagBar dan sesuatu yang tumbuh di rumah untuk mengekstrak penyelesaian dari file tag.
SnipMate , sebuah plugin pelengkap tag dasar, bersama dengan snippet , dan mencari tahu sendiri cara menambahkan snippet, karena ini agak rumit.
UltiSnips bersama dengan UltiSnips-Cuplikan yang berbeda dari cuplikan di atas.
Tern untuk Vim , perpustakaan yang menjanjikan yang melakukan introspeksi kode aktual untuk mendapatkan pelengkapan otomatis yang benar. Namun itu buggy, sangat lambat, memiliki kebocoran memori yang akan crash Vim, dan mungkin ditinggalkan.
YouCompleteMe , penyelesaian fuzzy as-you-type yang menjalankan server di latar belakang, bersama dengan fungsi buatan sendiri untuk penyelesaian cuplikan.
Eclim - upaya mulia untuk menjalankan server Eclipse di latar belakang dan memberi tahu Vim pelengkapan otomatis jika ia melakukan introspeksi dengan cepat. Ia bekerja tentang serta Tern.
Akhirnya, Closetag atau delimitMate atau autoclose atau sebuah bananagram rumah-tumbuh untuk auto penutupan tag dan kurung secara otomatis pada mengetik.
Hampir setiap plugin dalam daftar ini akan bertentangan dengan hampir setiap plugin lainnya dalam daftar ini.
YouCompleteMe tampaknya menjadi pemimpin paket, tetapi saya tidak pernah bisa membuatnya berfungsi dengan baik dengan tag selesai, dan kode-introspeksi-penyelesaiannya belum terbukti kuat.
Pendapat pribadi saya adalah bahwa kondisi saat ini dari dunia pelengkapan otomatis Vim dalam kondisi buruk. Untuk proyek-proyek kecil Anda mungkin baik-baik saja menggunakan salah satu solusi di atas. Jika Anda berurusan dengan API sederhana, Anda dapat menyimpan sebagian besar di kepala Anda, penyelesaian non-kode-introspeksi mungkin akan ok. Jika Anda berurusan dengan proyek besar, atau membutuhkan manfaat keamanan tipe saat pemrograman, IDE yang lengkap ( Eclipse , Visual Studio , WebStorm ) akan cocok untuk Anda jauh lebih baik daripada Vim.
Kelemahan dari IDE, tentu saja, adalah bahwa Anda tidak akan memiliki kekuatan Vim lagi. Saya belum pernah menggunakan IDE tunggal yang memiliki mode Vim yang dapat diterima.
Vim memiliki bias bahasa moderat terhadap bahasa mirip-C yang tidak diketik, dan sebaliknya memiliki harapan bahwa fitur spesifik bahasa apa pun akan ditambahkan oleh pengguna sebagai plugin. Sayangnya, ini telah menyebabkan ekosistem pelengkapan otomatis terpecah. Beberapa opsi layak, tetapi tidak ada yang sempurna, dan jarang ada pemimpin mayoritas / praktik terbaik.
let g:acp_behaviorSnipmateLength=-1
lihat:help autocomplpop
) yang seharusnya Anda tambahkan ke .vimrc Anda, apakah Anda menambahkannya?