Apakah ada plugin pelengkapan otomatis untuk vim?

9

Apakah ada plugin pelengkapan otomatis untuk vim? Apa pilihan saya di sini?

Saat ini saya menggunakan AutoComplPop , tetapi memiliki integrasi yang buruk dengan snipMate yang saya gunakan dan lambat lambat pada file Ruby (bahkan <100 baris).

Saya telah melihat beberapa plugin lain, tetapi mereka sudah mati sejak setidaknya lebih dari setahun. Jadi, ada ide?

naquad
sumber
ACP bekerja sangat baik di sini dan saya tidak punya masalah dengan SnipMate. Ada pengaturan ( let g:acp_behaviorSnipmateLength=-1lihat :help autocomplpop) yang seharusnya Anda tambahkan ke .vimrc Anda, apakah Anda menambahkannya?
romainl

Jawaban:

12

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 &omnifuncdalam 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), .vimrcpengaturan yang rumit , dan NeoSnippet untuk penyelesaian cuplikan.

  • Kombinasi monster dari exuberant-ctagsdan 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.

Andy Ray
sumber
6

Ini yang bagus: YouCompleteMe

YouCompleteMe yang membuat menu dropdown muncul secara otomatis saat Anda mengetik, dan mendukung pemilihan fuzzy, jadi jika Anda memiliki pengenal yang dipanggil partition_finderdan Anda mengetik sesuatu seperti ptfsaat mengedit file C ++, daftar saran dropdown akan menyertakan keduanya printfdan partition_finderkarena mereka berisi huruf yang sama dalam urutan yang sama. Jika Anda memiliki variabel yang dipanggil myBrain, Anda bisa mengetik brndan itu akan menyarankan itu. YouCompleteMe juga memprioritaskan saran berdasarkan frekuensi penggunaan sebelumnya.

trusktr
sumber
2

Saya menggunakan neocomplcache dengan snipmate + snipmate snippet

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

Anda dapat melihat vimrc saya

juanpablo
sumber
2

Saya mencoba necomplecache dengan neosnippet. Saya kira ini akan memiliki integrasi yang lebih baik karena keduanya ditulis oleh orang yang sama.

Forethinker
sumber
1

Saya percaya vim memiliki satu built-in yang disebut OmniComplete. Dalam mode insert use ctrl+x,ctrl+o.

Kalau tidak, Anda dapat melakukan penyelesaian kata kunci dari mode insert dengan ctrl+n. Ketika Anda memintanya, itu akan memberi Anda dropdown menampilkan kemungkinan kata yang ditemukan dalam file yang Anda edit, serta ditemukan dari file lain yang telah Anda buka. Terus menekan ctrl+nuntuk berputar melalui opsi. Ketika Anda sampai pada kata yang Anda inginkan, terus saja mengetik seperti biasa.

Jika Anda tidak dapat menemukan kata yang Anda inginkan, ctrl+npada akhirnya akan keluar dari daftar dan Anda dapat terus mengetik, atau Anda dapat menekan ESCdan kemudian bcwpergi bke awal kata yang menyinggung dan cmenggantinya wdengan yang Anda inginkan.

Conrad.Dean
sumber
Satu built-in Vim tampaknya payah. Setiap kali saya menekan <cx> <co> itu hanya mengatakan "Pola tidak ditemukan". Namun, jika saya menekan <cn>, penyelesaian muncul dalam dropdown tepat di bawah kata yang sedang diketik. Apakah itu sama? Apakah ada cara untuk membuat drop down autocomplete muncul secara otomatis, tanpa harus menekan pintasan?
trusktr
Saya tidak mengetahui plugin yang membuat pelengkapan otomatis muncul tanpa interaksi, maaf :(. <c-x><c-o>Hanya berfungsi untuk hal-hal yang vim secara eksplisit diberi tahu cara mendukung. Secara default, saya pikir itu hanya dapat melakukan beberapa hal kecil, dan hal-hal lainnya. seperti penyelesaian CSS, tetapi jika Anda menginginkan sesuatu seperti Eclipse ada beberapa plugin vim yang mencoba menyediakannya untuk Anda
Conrad.Dean
1
Saya menemukan plugin untuk vim bernama YouCompleteMe yang membuat menu dropdown muncul secara otomatis saat Anda mengetik, dan mendukung pemilihan fuzzy, jadi jika saya memiliki pengenal yang dipanggil partition_finderdan saya mengetik sesuatu seperti ptfsaat mengedit file C ++, menu dropdown akan menyarankan keduanya printfdan partition_finderkarena mengandung huruf yang sama dalam urutan yang sama. Jika saya memiliki variabel yang dipanggil myBrain, saya bisa mengetik brndan itu akan muncul. YouCompleteMe juga memprioritaskan saran berdasarkan frekuensi penggunaan sebelumnya. Lihat di sini: valloric.github.io/YouCompleteMe
trusktr
1

Saya telah menggunakan plugin baru SimpleAutoComplPop dari AutoComplPop yang asli. Meskipun, saya tidak terbiasa dengan ruby ​​atau snipMate, Anda mungkin sudah mencoba dan saya senang mendapatkan umpan balik :)

rox
sumber