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 ++.
sumber
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)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 digunakanlibclang
dengan caching sekarang dan karenanya harus lebih cepat.formatted like this
.)Jawaban:
Coba YouCompleteMe . Ini menggunakan Dentang melalui antarmuka libclang, menawarkan semantik C / C ++ / Objective-C. Ini mirip clang_complete, tetapi secara substansial lebih cepat dan dengan fuzzy-matching.
Selain yang di atas, YCM juga menyediakan penyelesaian semantik untuk C #, Python, Go, TypeScript dll. Ini juga menyediakan penyelesaian non-semantik, berbasis pengidentifikasi untuk bahasa yang tidak memiliki dukungan semantik.
sumber
Ada juga clang_complete yang menggunakan
clang
kompiler untuk memberikan penyelesaian kode untuk proyek C ++. Ada pertanyaan lain dengan petunjuk pemecahan masalah untuk plugin ini.Pengaya tampaknya berfungsi cukup baik selama proyek dikompilasi, tetapi sangat lambat untuk proyek besar (karena ia mencoba kompilasi penuh untuk menghasilkan daftar tag).
sumber
clang_complete
Plugin bekerja dengan baik pada Cygwin dan Windows. Tidak dapat mengatakan apa-apa tentang proyek besar karena saya tidak punya. :)sesuai permintaan, berikut adalah komentar yang saya berikan sebelumnya:
Lihatlah ini:
Link ini akan membantu Anda jika Anda ingin menggunakan monodevelop pada MacOSX
Semoga sukses dan selamat coding.
sumber
Saya baru saja menemukan proyek Eclim ditautkan dalam pertanyaan lain . Ini terlihat cukup menjanjikan, setidaknya untuk integrasi Java.
sumber
Saya agak terlambat ke pesta tetapi autocomplpop mungkin bisa membantu.
sumber
adalah apa yang Anda cari seperti intellisense?
insevim tampaknya mengatasi masalah ini.
tautan ke tangkapan layar di sini
sumber
Apakah seseorang menyebutkan kode_lengkap?
Tapi Anda tidak suka ctag, jadi ini mungkin bukan yang Anda cari ...
sumber