Saya tahu bahwa emacs mendukung penyelesaian kode. Tapi sejujurnya saya belum pernah menjadi pembaca FAQ yang baik, setidaknya untuk sesuatu yang saya benar-benar baru. Jadi saya ingin tahu apa yang perlu saya unduh dan bagaimana membuatnya sehingga emacs dapat melakukan beberapa penyelesaian kode cerdas untuk saya di C ++, dan Java. Atau adakah paket yang menyelesaikan kode untuk banyak bahasa utama?
20
complete.el
mencoba perpustakaan standar . Ini sangat tua dan sedikit diketahui, tetapi jenis penyelesaian in-buffer yang disediakannya bisa bermanfaat.M-x find-library complete
, lalu baca Komentar dalam file.@ Doug jawaban agak ketinggalan zaman dan fokusnya adalah pada perluasan kode dengan menggunakan cuplikan yang telah ditentukan.
Saya pikir pertanyaan OP adalah tentang Intellisense (nama metode lengkap otomatis kelas, misalnya).
hippie expand dulu populer, penganalisis sintaks adalah tag emacs . Jadi ia mendukung semua bahasa yang didukung ctag (termasuk C ++, Java). Tetapi hasilnya tidak sempurna karena ctag hanya menggunakan ekspresi reguler untuk menganalisis kode. Lihat init-hippie-expand.el saya untuk detailnya. Anda bisa mulai dengan memeriksa nilai
hippie-expand-try-functions-list
pelengkapan otomatis adalah yang modern dengan UI mewah (menu dropdown, bahkan di jendela konsol). Jika Anda menggunakan dentang sebagai backend. Intellisense jauh lebih baik. Untuk membuat dentang berfungsi, Anda perlu menginstal lengkapi-otomatis yang merupakan plugin lengkapi-otomatis. Ini hanya mendukung dukungan dentang bahasa (C / C ++ / Obj-C). Seperti yang ditunjukkan Sylvain Benner , Anda dapat menggunakan emacs-eclim sebagai java parsing back end yang sebenarnya memanggil executable of eclipse. Jadi pelengkapan otomatis dapat mendukung java. Lihat init-auto-complete.el saya untuk detailnya.
semantic menyediakan UI dan mesin parsing ujung belakang. Itu lambat. UI dropdown OK tetapi membutuhkan X window. Hasil intellisense lebih baik daripada ctags. Dan dokumentasinya terlalu culun untukku. Lihat init-semantic.el untuk detailnya.
modus perusahaan mirip dengan pelengkapan otomatis, perbedaannya adalah paket semuanya menjadi satu bundel. Misalnya, pengembang C ++ hanya perlu menginstal mode perusahaan (lengkapi-otomatis memerlukan plugin pihak ketiga). Perbedaan UI lainnya adalah perusahaan akan menunjukkan kandidat secara otomatis . Jadi, Anda menekan lebih sedikit tombol di perusahaan. Dimungkinkan untuk melakukan hal yang sama dalam pelengkapan otomatis setelah penyesuaian.
Singkatnya, pelengkapan otomatis, perusahaan adalah dua pilihan paling populer. Semantik dan hippie-ekspansi juga disambut tetapi kurang digunakan. Lainnya terlalu sepele untuk disebutkan dan fitur mereka sudah dibahas oleh empat besar. Misalnya, lengkapi-otomatis dapat menggunakan yasnippet sebagai sumber input (lengkapi-otomatis berikan UI, tetapi kandidat sebenarnya dihasilkan oleh yasnippet di belakang).
Saya sarankan untuk menggunakan pelengkap otomatis atau perusahaan sebagai plugin penyelesaian kode utama dan semantik atau hippie-expand sebagai plugin pelengkap .
Saya menggunakan mode perusahaan dan memperluas hippie karena,
Mode perusahaan sekarang (tahun 2017) lebih aktif dipertahankan daripada pelengkapan otomatis dan memiliki lebih banyak plugin pihak ketiga (misalnya, plugin lateks)
hippie-expand tidak terlalu aktif tetapi tidak menempati
TAB
kunci yang menggunakan mode perusahaan / semantik / pelengkap otomatisJika Anda menggunakan mode perusahaan untuk C ++ / Java, Anda mungkin ingin memodifikasi
company-backends
.Beberapa tips tentang mode perusahaan,
Anda mungkin perlu mengubah nilai
company-backends
. Sebagai contoh, anggaplah nilainya(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Maka jikacompany-eclim
bisa mendapatkan kandidat yang tidak nol,company
anggap Anda sedang menulis java, jadi TIDAK akan menjalankan backends setelahnyacompany-eclim
.Sekarang mari kita lihat
(company-dabbrev-code company-gtags company-etags company-keywords)
. Keempat backend ini akan digunakan bersama. Misalnya, bahkan setelahcompany-dabbrev-code
berhasil menjemput kandidat yang tidak nol, tiga backend lainnya masih dieksekusi.Di dunia nyata, seringkali perlu menyesuaikan kembali urutan backend atau menambahkan backend baru (
company-rtags
, misalnya).sumber
Jawaban singkat: Saya tidak tahu untuk emacs yang berguna untuk java. Perluasan dinamis tidak peduli dengan pustaka di jalur kelas Anda, itu tidak tahu apa-apa tentang kode yang Anda ketikkan itu hanya dapat diperluas ke teks yang sudah ada di salah satu buffer. JDE dan emacs-eclim mencoba menyediakan fungsionalitas ini tetapi secara pribadi saya tidak terkesan.
sumber
Jawaban singkat:
M-/
Jawaban panjang: RTFM :-)
sumber
C-h r
)C-h k M-/
?