Singkatnya, saya mencari kerja fitur autocompletion untuk editor Vim. Saya telah berpendapat sebelumnya bahwa Vim sepenuhnya menggantikan IDE di Linux dan walaupun itu benar, ia tidak memiliki satu fitur penting: pelengkapan otomatis.
Aku tahu tentang Ctrl+ N, integrasi riang Ctags , Taglist , cppcomplete dan OmniCppComplete . Sayangnya, tidak ada yang sesuai dengan deskripsi saya tentang "pelengkapan otomatis yang bekerja:"
- Ctrl+N berfungsi dengan baik (hanya) jika Anda lupa cara mengeja
class
, atauwhile
. Baiklah. - Ctags memberi Anda dasar tetapi memiliki banyak kelemahan.
- Taglist hanyalah pembungkus Ctag dan karenanya, mewarisi sebagian besar kekurangannya (meskipun berfungsi dengan baik untuk daftar deklarasi).
- cppcomplete tidak berfungsi seperti yang dijanjikan, dan saya tidak dapat menemukan kesalahan saya, atau apakah itu "berfungsi" dengan benar dan batasannya sesuai dengan desain.
- OmniCppComplete tampaknya memiliki masalah yang sama dengan cppcomplete, yaitu pelengkapan otomatis tidak berfungsi dengan baik. Selain itu,
tags
file sekali lagi perlu diperbarui secara manual.
Saya menyadari fakta bahwa bahkan tidak modern, full-blown IDEs menawarkan penyelesaian kode C ++ yang baik. Itu sebabnya saya menerima kekurangan Vim di bidang ini sampai sekarang. Tapi saya pikir tingkat dasar penyelesaian kode tidak terlalu banyak untuk ditanyakan, dan pada kenyataannya diperlukan untuk penggunaan yang produktif. Jadi saya mencari sesuatu yang bisa menyelesaikan setidaknya hal-hal berikut.
Kesadaran sintaksis . cppcomplete menjanjikan (tetapi tidak memenuhi untuk saya), yang benar, pelengkapan otomatis yang menyadari cakupan hal berikut:
variableName.abc variableName->abc typeName::abc
Dan sungguh, yang lainnya sama sekali tidak berguna.
Konfigurasi . Saya perlu menentukan (dengan mudah) di mana file sumbernya, dan karenanya dari mana skrip mendapatkan informasi penyelesaian otomatisnya. Bahkan, saya punya Makefile di direktori saya yang menentukan jalur sertakan yang diperlukan. Eclipse dapat menafsirkan informasi yang ditemukan di dalamnya, mengapa bukan skrip Vim juga?
Up-to-dateness . Segera setelah saya mengubah sesuatu di file saya, saya ingin penyelesaian otomatis mencerminkan hal ini. Saya tidak ingin memicu secara manual
ctags
(atau sesuatu yang sebanding). Juga, perubahan harus bertahap , yaitu ketika saya telah mengubah hanya satu file itu benar-benar tidak dapat diterima untukctags
mem-parsing ulang seluruh pohon direktori (yang mungkin sangat besar).
Apakah saya lupa sesuatu? Jangan ragu untuk memperbarui.
Saya nyaman dengan cukup banyak konfigurasi dan / atau bermain-main tapi saya tidak ingin memprogram solusi dari awal, dan saya tidak pandai debugging skrip Vim.
Catatan terakhir, saya benar-benar ingin sesuatu yang serupa untuk Java dan C # tapi saya rasa itu terlalu banyak untuk diharapkan: ctags
hanya mem-parsing file kode dan Java dan C # memiliki kerangka kerja besar yang telah dikompilasi yang perlu diindeks. Sayangnya, pengembangan .NET tanpa IDE bahkan lebih merupakan PITA daripada C ++.
clang_complete
secara teknis paling baik tetapi sangat lambat karena kurangnya caching hasil dan kompilasi parsial. Saya harus mengakui bahwa saya belum mencoba semua jawaban karena beberapa memerlukan pengaturan yang berbelit-belit dan memakan waktu. Saya akan menahan napas untuk plugin yang dapat digunakan sekarang setelah dentang akhirnya memungkinkan pengembang untuk membangun AST dari sumber C ++ (sampai sekarang, tidak ada parser gratis yang bagus untuk C ++ tersedia).
clang_complete
baru-baru ini? Itu bisa digunakan libclang
dengan caching sekarang dan karenanya harus lebih cepat.
formatted like this
.)
sh
(artinya ada di perpustakaan saya) dan diikuti oleh singkatan dari kelas saya. MisalnyashP
untukParser
kelas. Maka yang perlu Anda lakukan adalah menulisshP
dan tekan CTRL + p (atau CTRL + n jika Anda mau) dan dapatkan anggota kelas dari penggunaan terakhir menjadi yang pertama (atau pertama hingga terakhir jika CTRL + n)