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?
vim
autocomplete
naquad
sumber
sumber
let g:acp_behaviorSnipmateLength=-1
lihat:help autocomplpop
) yang seharusnya Anda tambahkan ke .vimrc Anda, apakah Anda menambahkannya?Jawaban:
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
danDoctorJS
(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.
sumber
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_finder
dan Anda mengetik sesuatu sepertiptf
saat mengedit file C ++, daftar saran dropdown akan menyertakan keduanyaprintf
danpartition_finder
karena mereka berisi huruf yang sama dalam urutan yang sama. Jika Anda memiliki variabel yang dipanggilmyBrain
, Anda bisa mengetikbrn
dan itu akan menyarankan itu. YouCompleteMe juga memprioritaskan saran berdasarkan frekuensi penggunaan sebelumnya.sumber
Saya menggunakan neocomplcache dengan snipmate + snipmate snippet
Anda dapat melihat vimrc saya
sumber
Saya mencoba necomplecache dengan neosnippet. Saya kira ini akan memiliki integrasi yang lebih baik karena keduanya ditulis oleh orang yang sama.
sumber
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 menekanctrl+n
untuk 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+n
pada akhirnya akan keluar dari daftar dan Anda dapat terus mengetik, atau Anda dapat menekanESC
dan kemudianbcw
pergib
ke awal kata yang menyinggung danc
menggantinyaw
dengan yang Anda inginkan.sumber
<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 Andapartition_finder
dan saya mengetik sesuatu sepertiptf
saat mengedit file C ++, menu dropdown akan menyarankan keduanyaprintf
danpartition_finder
karena mengandung huruf yang sama dalam urutan yang sama. Jika saya memiliki variabel yang dipanggilmyBrain
, saya bisa mengetikbrn
dan itu akan muncul. YouCompleteMe juga memprioritaskan saran berdasarkan frekuensi penggunaan sebelumnya. Lihat di sini: valloric.github.io/YouCompleteMeSaya 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 :)
sumber