Emacs tidak dapat bersaing dengan IDE lain jika tidak memiliki fungsi penyelesaian otomatis. Pelengkapan otomatis hanya membuat saya seorang programmer yang lebih efisien. Saya tahu ekstensi Mode Lengkap Otomatis , tetapi tidak bekerja dengan C ++.
Bagaimana saya bisa mencapai pelengkapan otomatis yang cerdas dan efisien untuk C ++?
Pertanyaan ini awalnya ditanyakan oleh Malabarba pada proposal Area 51: Bagaimana cara mendapatkan penyelesaian otomatis yang cerdas di C ++?
c++
completion
Luke
sumber
sumber
Jawaban:
Penafian: Saya penulis ironi-mode
Jika Anda hanya ingin penyelesaian otomatis pintar, saya dapat merekomendasikan ironi-mode dengan ironi perusahaan .
Alat lain yang belum dikutip adalah emacs-ycmd .
sumber
irony-mode
clang_codeCompleteAt
dengan TU yang diuraikan (tetapi perubahan yang belum disimpan) membutuhkan waktu 3-5 detik. Apakahirony-mode
lebih cepat dari ini?Lihat panduan saya . Ini mencantumkan beberapa metode untuk pelengkapan otomatis dalam C / C ++.
Pilihan tersebut adalah:
Menggunakan Irony . Sangat direkomendasikan, karena menggunakan dentang dan mudah diatur dibandingkan dengan solusi lain.
Menggunakan parser bawaan dari Emacs. Ini adalah pelengkapan otomatis terbaik yang bisa Anda dapatkan dari dalam parser Emacs, Semantic, tetapi itu akan lambat pada proyek besar seperti kernel Linux.
Menggunakan
company-mode
paket dengancompany-clang
. Memberikan denda penyelesaian kode untuk sistem termasuk jalur karena dapat secara otomatis mendapatkan jalur dari Dentang, tetapi harus melakukan beberapa konfigurasi untuk proyek lokalMenggunakan
company-mode
dengancompany-gtags
. Ia menggunakan basis data tag yang dihasilkan dari GNU Global sebagai penyelesaian. Anda dapat menggunakan ini untuk memberikan kode lengkap secara lokal untuk proyek Anda. Ini tidak sepenuhnya cerdas karena ia melempar semua yang ada di dalam database yang dihasilkan kepada Anda.rtags
melangkah lebih jauh dengan menyediakan server untuk analisis langsung. Tetapi rumit untuk setup dibandingkan dengan solusi Elisp murni.sumber
Saya telah sukses besar dengan RTags + Company .
RTags membutuhkan daemon terpisah yang
rdm
berjalan yang menggunakan dentang untuk penyelesaian kode, navigasi kode dan refactoring.rdm
juga berfungsi sebagai basis data simbol, yang berarti pelengkapan otomatis jauh lebih cepat daripada solusi apa pun yang langsung meneleponclang_codeCompleteAt
.Rdm membutuhkan info bendera kompilasi untuk proyek-proyek Anda yang bisa merepotkan, tetapi jika Anda mengikuti saran dari RTags halaman dan symlink
gcc-rtags-wrapper.sh
untukgcc
,g++
,cc
danc++
rdm otomatis akan diperbarui dengan bendera kompilasi baru pada mengkompilasi ulang.sumber
Solusi 1: mode-perusahaan + dentang
Satu-satunya masalah adalah Anda perlu memberi tahu mode perusahaan tempat mencari file header c / c ++ proyek Anda.
Jika Anda menggunakan cmake, Anda dapat membiarkan https://github.com/redguardtoo/cpputils-cmake untuk melakukan pengaturan untuk Anda (PETUNJUK: Saya penulis cpputils-cmake).
ATAU
Solusi 2: mode perusahaan + gnu global
Tidak ada lagi yang perlu dikatakan, Anda perlu membuat tag dengan alat global cli gnu, seperti yang disebutkan lainnya.
sumber
Saya telah menggunakan cmake-ide untuk mengkonfigurasi rtag, flycheck, ironi, dan dentang perusahaan.
Sekarang Anda dapat mengkonfigurasi sistem build Anda dan plugin emacs analisis statis favorit Anda secara bersamaan!
EDIT: Perhatikan bahwa dentang perusahaan menyediakan pelengkapan otomatis, yang merupakan fitur yang Anda cari. cmake-ide juga dapat mengkonfigurasi flycheck dan rtags, yang menambahkan beberapa fitur seperti IDE.
sumber
Mode semantik Mx
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Tag Tabel
Temukan . -nama "*. [chCH]" -print | etag -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - menghasilkan file tag untuk Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
Penyelesaian CMi (atau M-TAB) pada titik. Jika mode Semantik diaktifkan, coba gunakan data pengurai Semantic. Jika mode Semantic dinonaktifkan atau gagal, coba selesaikan menggunakan tabel tag yang dipilih (lihat Tag)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M- (cari-tag) meminta nama tag && melompat ke definisi
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
sumber