Saat ini alur kerja saya dengan Emacs ketika saya coding di C atau C ++ melibatkan tiga jendela. Yang terbesar di sebelah kanan berisi file yang saya kerjakan. Bagian kiri dibagi menjadi dua, bagian bawah menjadi sebuah shell yang saya gunakan untuk mengetikkan kompilasi atau membuat perintah, dan bagian atas sering berupa semacam dokumentasi atau file README yang ingin saya konsultasikan ketika saya sedang bekerja. Sekarang saya tahu ada beberapa pengguna Emacs yang cukup ahli di luar sana, dan saya ingin tahu apa yang secara fungsional berguna bagi Emacs jika tujuannya adalah menggunakannya sebagai IDE yang lengkap. Secara khusus, sebagian besar IDE biasanya memenuhi fungsi-fungsi ini adalah beberapa bentuk:
- Editor kode sumber
- Penyusun
- Debugging
- Pencarian Dokumentasi
- Kontrol Versi
- Fitur OO seperti pencarian kelas dan inspektur objek
Untuk beberapa di antaranya, cukup jelas bagaimana Emacs dapat memenuhi fungsi-fungsi ini, tetapi bagaimana dengan sisanya? Juga, jika bahasa tertentu harus difokuskan, saya akan mengatakan itu harus C ++.
Sunting: Satu pengguna menunjukkan bahwa saya seharusnya lebih spesifik ketika saya mengatakan 'bagaimana dengan yang lain'. Sebagian besar saya ingin tahu tentang kontrol versi yang efisien, serta pencarian dokumentasi. Misalnya, dalam SLIME cukup mudah untuk melakukan pencarian hyperspec cepat pada fungsi Lisp. Apakah ada cara cepat untuk mencari sesuatu dalam dokumentasi C ++ STL (jika saya lupa sintaks yang tepat dari hash_map , misalnya)?
sumber
Jawaban:
Anda harus spesifik tentang apa yang Anda maksud dengan "sisanya". Kecuali untuk pemeriksa objek (yang saya sadari), emacs melakukan semua hal di atas dengan mudah:
M-x compile
dan masukkan perintah kompilasi Anda. Dari sana, Anda bisa sajaM-x compile
dan menggunakan default. Emacs akan menangkap kesalahan kompiler C / C ++ (berfungsi terbaik dengan GCC) dan membantu Anda menavigasi ke baris dengan peringatan atau kesalahan.M-x gdb
dan itu akan membuat buffer gdb dengan binding khususSunting: Saya menyadari jawaban saya tentang pencarian dokumentasi benar-benar berkaitan dengan navigasi kode. Berikut ini beberapa informasi penting:
Pencarian Google tidak diragukan lagi akan mengungkapkan contoh lebih lanjut.
Seperti yang ditunjukkan oleh tautan kedua, mencari fungsi (dan apa pun) dalam dokumentasi lain dapat dilakukan, meskipun tidak didukung di luar kotak.
sumber
Saya harus merekomendasikan Emacs Code Browser sebagai lingkungan gaya IDE yang lebih "tradisional" untuk emacs.
EDIT : Saya juga sekarang merekomendasikan Magit lebih tinggi dari antarmuka VCS standar di emacs.
sumber
Alih-alih menjalankan perintah make di jendela shell, sudahkah Anda mencoba kompilasi Mx? Ini akan menjalankan perintah make Anda, menampilkan kesalahan, dan dalam banyak kasus membuatnya sangat mudah untuk melompat ke baris kode yang menyebabkan kesalahan jika output menyertakan nama file dan nomor baris.
Jika Anda penggemar IDE, Anda mungkin juga ingin melihat paket speedbar emacs (Mx speedbar). Dan, jika Anda belum melakukannya, pelajari tentang cara menggunakan tabel tag untuk menavigasi kode Anda.
sumber
Ada sudut-sudut emacs yang pernah ditemukan membuat Anda lebih produktif dengan cara yang tidak pernah Anda pikirkan. Seperti yang disebutkan orang lain, menggunakan tag adalah cara yang fantastis dan cepat untuk memperbesar kode sumber Anda dan menggunakan M- / (dabbrev-expand) sering kali melakukan apa yang Anda harapkan saat mengisi nama variabel.
Menggunakan kejadian berguna untuk mendapatkan buffer dengan semua kejadian ekspresi reguler dalam buffer. Itu sangat berguna ketika refactoring kode dan mencari fragmen kode atau penggunaan variabel, atau jika Anda menggunakan penanda TODO dalam file sumber Anda dan Anda ingin mengunjungi semuanya.
fungsi flush-lines, sort-numeric-field, replace-regexp dan rectangle bisa sangat berguna untuk mengambil dump dari beberapa alat dan mengonversinya menjadi data yang berguna seperti program elisp atau spreadsheet yang dibatasi koma.
Saya menulis halaman tentang IDE seperti hal-hal yang dapat Anda lakukan dengan emacs
http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html
Mempelajari elisp adalah cara hebat lainnya untuk menjawab bagi diri Anda sendiri apa lagi yang dapat dilakukan emacs di luar apa yang dapat dilakukan oleh IDE biasa.
Misalnya saya telah membuat blog tentang menulis fungsi pembantu Perforce seperti menyalahkan (menulis sendiri berarti Anda dapat membuatnya berperilaku tepat seperti yang Anda inginkan) ...
http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html
Saya juga menulis kode yang secara dinamis membuat komentar untuk suatu fungsi pada titik, yang cocok dengan standar pengkodean yang saya kerjakan.
Tidak ada kode elisp saya yang sangat bagus, dan sebagian besar sudah ada di perpustakaan, tetapi sangat berguna untuk membuat emacs melakukan hal-hal khusus yang baru saja muncul selama hari kerja.
sumber
Anda dapat menemukan deskripsi terperinci tentang emacs & integrasi kontrol versi di situs saya . Saya juga sedang mengerjakan artikel tentang penggunaan Emacs sebagai Lingkungan Pengembangan untuk banyak bahasa - C / C ++, Java, Perl, Lisp / Skema, Erlang, dll ...
sumber
Untuk kontrol versi, ada beberapa hal yang bisa Anda gunakan, tergantung pada sistem kontrol versi apa yang Anda gunakan. Tetapi beberapa fungsi umum untuk mereka semua.
vc.el adalah cara bawaan untuk menangani kontrol versi di tingkat file. Ini memiliki backends untuk sebagian besar sistem kontrol versi. Misalnya, backend Subversion dilengkapi dengan Emacs, dan ada backend git dan lainnya yang tersedia dari sumber lain.
Perintah yang paling berguna adalah Cx vv (vc-next-action) yang melakukan tindakan selanjutnya yang sesuai untuk file yang Anda kunjungi. Ini mungkin berarti memperbarui dari repositori atau melakukan perubahan Anda, vc.el juga rebinds Cx Cq untuk check in dan out file jika Anda menggunakan sistem yang membutuhkannya (seperti RCS).
Perintah lain yang sangat berguna adalah Cx vl dan Cx v = yang menunjukkan kepada Anda log dan diff saat ini untuk file yang Anda gunakan.
Tetapi untuk produktivitas nyata, Anda harus menghindari menggunakan perintah file tunggal vc.el selain untuk hal-hal sederhana. Ada beberapa paket yang dapat memberi Anda gambaran tentang status seluruh pohon Anda, dan memberi Anda lebih banyak kekuatan, dan belum lagi kemampuan untuk membuat komitmen yang koheren yang mencakup beberapa file.
Sebagian besar sangat dipengaruhi atau didasarkan pada pcl-cvs / pcvs asli untuk CVS. Bahkan ada dua dari mereka yang datang dengan subversi, psvn.el dan dsvn.el . Ada paket untuk git dll.
sumber
Oke, semua orang di sini memberikan petunjuk yang sempurna untuk membuat emacs IDE yang hebat.
Tetapi siapa pun harus ingat bahwa, ketika Anda menyesuaikan emacs Anda dengan banyak ekstensi (terutama dengan yang untuk memeriksa jenis dengan cepat, pencarian definisi fungsi dll) emacs Anda akan memuat sangat, sangat lambat untuk editor.
Untuk mengatasinya, saya sangat merekomendasikan untuk menggunakan emacs di
server mode
.Cukup mudah digunakan, tidak perlu menyesuaikan file init Anda. Anda hanya perlu menjalankan emacs dalam mode daemon;
Ini akan membuat server emacs, maka Anda dapat menghubungkannya dari terminal, atau dari gui. Saya juga merekomendasikan untuk membuat beberapa alias agar mudah dipanggil.
Dengan cara ini, emacs akan menyala lebih cepat daripada gedit, janji.
Satu kemungkinan masalah di sini, jika Anda menjalankan emacs daemon dari pengguna biasa, Anda mungkin tidak dapat menghubungkan server emacs sebagai
root
.Jadi, jika Anda perlu membuka file yang memiliki akses root; gunakan
tramp
saja. Jalankan klien emacs Anda dengan pengguna normal dan buka file seperti ini;Ini membuat hidup saya lebih mudah, saya dapat membuka IDE python berat saya yang disesuaikan dalam milidetik dengan cara ini. Anda mungkin juga ingin menambahkan emacs --daemon ke startup sistem Anda, atau membuat file desktop untuk emacsclient. Itu terserah kamu.
Lebih lanjut tentang daemon emacs dan klien emacs dapat ditemukan di wiki;
http://www.emacswiki.org/emacs/EmacsAsDaemon
http://www.emacswiki.org/emacs/EmacsClient
sumber
EDITOR="emacsclient -t" VISUAL="emacsclient -c"
Anda dapat melakukan pengeditan berbasis sudo dengansudo -e
atausudoedit
, yang terkadang lebih disukai daripada menggunakan TRAMP (biasanya untuk alasan audit). Anda juga dapat memanggil emacsclient dengan--alternate-editor=
( membutuhkan ruang di akhir) dan itu akan memulai daemon jika itu tidak berjalan, yang menghilangkan kebutuhan untuk meletakkan daemon di startup sistem jika Anda bersedia menunggu untuk itu pertama kali Anda jalankan editor pada setiap boot.Saya setuju bahwa Anda harus belajar tentang kompilasi Mx (mengikat itu dan Mx kesalahan berikutnya ke urutan tombol pendek).
Pelajari tentang binding untuk kontrol versi (mis. Vc-diff, vc-next-action, dll.)
Lihatlah ke register. Anda tidak hanya dapat mengingat lokasi dalam buffer tetapi juga konfigurasi seluruh jendela (Cx rw - window-configuration-to-register).
sumber
Titik awal (yang mungkin tidak jelas) untuk menjelajahi fitur VC dari Emacs adalah Mx vc-next-action .
Itu melakukan "operasi kontrol versi logis berikutnya" pada file saat ini, tergantung pada keadaan file dan backend VC. Jadi, jika file tidak di bawah kontrol versi, itu mendaftarkannya, jika file telah diubah, perubahan dikirimkan dll.
Butuh sedikit membiasakan diri, tetapi saya merasa sangat berguna.
Pengikat kunci default adalah Cx vv
sumber
Ada TFS.el untuk integrasi emacs ke Microsoft TFS . Ini berfungsi dengan TFS apa pun, termasuk TFS yang menjalankan Codeplex.com.
Langkah-langkah dasar untuk menyiapkan:
Tempatkan tfs.el di jalur beban Anda.
Dalam file .emacs Anda:
juga dalam file .emacs Anda, atur binding kunci lokal atau global untuk perintah tfs. seperti itu:
sumber
kompilasi, kesalahan-berikutnya, dan kesalahan-sebelumnya adalah semua perintah yang cukup penting untuk pengembangan C ++ di Emacs (bekerja sangat baik pada keluaran grep juga). Etag, tag-kunjungan-tabel, dan tag-cari juga penting. completion.el adalah salah satu peretasan tanpa tanda jasa yang bagus di abad ke-20, dan dapat mempercepat peretasan C ++ Anda dengan urutan besar. Oh dan jangan lupa ediff.
Saya belum belajar cara menggunakan kontrol versi tanpa mengunjungi shell, tetapi sekarang saya menjalankan lebih banyak komit (dengan git) saya mungkin harus melakukannya.
sumber
Anda juga mungkin menemukan tabbar bermanfaat. Ini meniru satu-satunya perilaku yang saya lewatkan ketika pindah dari Eclipse ke Emacs. Terikat "," dan "." untuk pindah ke bilah tab sebelumnya dan berikutnya, itu menghidupkan Anda dari beralih buffer dengan Ctrl-x b sepanjang waktu.
Sayangnya, halaman web yang disebutkan tidak memberikan versi yang benar untuk diunduh. Namun, sebagian besar versi Ubuntu mengirimkannya dalam paket emacs-goodies mereka.
sumber
Saya menggunakan emacs di Windows. modul kompilasi bagus, tetapi saya ingin kompilasi menjadi lebih pintar tentang baris perintah kompilasi yang disarankan. Dimungkinkan untuk menggunakan "File Variables" untuk menentukan
compile-command
, tetapi saya menginginkan sesuatu yang sedikit lebih pintar dari itu. Jadi saya menulis sedikit fungsi untuk membantu. Itu menebak perintah kompilasi untuk digunakan, untuk meminta pengguna dengan, saat berjalancompile
.Fungsi duga mencari file vbproj atau csproj atau sln, dan jika ditemukan, ini menunjukkan msbuild. Kemudian terlihat pada nama file buffer, dan tergantung pada itu, menyarankan hal yang berbeda. File .wxs berarti itu adalah proyek WIX, dan Anda mungkin ingin membangun MSI, jadi logika tebakan menyarankan perintah nmake untuk MSI. Jika ini adalah modul Javascript, maka sarannya adalah menjalankan jslint-for-wsh.js untuk memisahkan file .js. Sebagai mundur, itu menyarankan nmake.
Kode yang saya gunakan terlihat seperti ini:
Saya mencoba melakukan ini sebagai "sebelum saran" untuk fungsi kompilasi tetapi tidak dapat membuatnya bekerja dengan memuaskan. Jadi saya mendefinisikan fungsi baru dan mengikatnya ke kombinasi penekanan tombol yang sama yang telah saya gunakan
compile
.sumber
Pada pencarian dokumentasi: itu tergantung pada bahasa pemrograman Anda.
Pustaka dan panggilan sistem biasanya didokumentasikan dalam halaman manual. Untuk itu bisa Anda gunakan
M-x man
. Beberapa hal dapat didokumentasikan dengan lebih baik di halaman info; gunakanM-x info
.Untuk elisp itu sendiri, gunakan
C-h f
. Untuk python, gunakan>>> help(<function, class, module>)
di interpreter.Saya menemukan bahwa sebagian besar bahasa lain menawarkan dokumentasi dalam bentuk html. Untuk itu, coba peramban yang disematkan (saya menggunakan w3m). Setel
BROWSER
variabel lingkungan Anda menjadi skrip wrapper sekitaremacsclient -e "(w3m-goto-url-new-session \"$@\")"
(pada * nix), seandainya ada sesuatu yang membuka browser dan Anda ingin itu dibuka di dalam emacs.sumber
Saya tahu ini adalah posting yang sangat lama. Tetapi pertanyaan ini berlaku untuk pemula emacs.
IMO cara terbaik untuk menggunakan emacs sebagai sebuah ide adalah dengan menggunakan protokol server bahasa dengan emacs. Anda dapat menemukan semua informasi tentang server bahasa di situs web yang ditautkan.
Untuk pengaturan cepat, saya akan mendorong Anda untuk pergi ke halaman ini misalnya . Ego eglot melakukan pekerjaannya dengan cukup baik. Ini terintegrasi dengan baik dengan paket penyelesaian otomatis seperti perusahaan. Memberikan referensi pencarian, dan banyak lagi.
Juga untuk debugger, Anda mungkin perlu debugger khusus untuk bahasa tertentu. Anda dapat menggunakan gdb dari dalam emacs. Cukup ketik
M-x gdb
.Untuk mengkompilasi kode Anda, yang terbaik adalah menggunakan perintah shell. Saya sedang mengerjakan eproj proyek ini . Butuh beberapa saat untuk menyelesaikannya. Tetapi yang dilakukannya hanyalah memetakan perintah shell ke tipe proyek. Dan membuat Anda memproyeksikan melalui shell. Itu melakukan hal yang sama untuk mengeksekusi perintah. Saya mungkin perlu bantuan menyelesaikan proyek ini. Ini tidak siap untuk digunakan, tetapi jika Anda tahu sedikit elisp Anda bisa membaca kode.
Selain itu, selalu lebih baik menggunakan perintah kompilasi emacs.
Untuk kontrol versi, saya belum melihat paket lain yang dapat menandingi kekuatan magit . Ini khusus untuk git. Juga untuk git ada paket git-timemachine lain, yang menurut saya sangat berguna.
Pencarian objek dan pencarian kelas disediakan oleh protokol server bahasa.
Pohon proyek dapat digunakan untuk antarmuka seperti ide dengan treemacs .
Ada juga proyek Interaction Library yang disebut proyektil .
Untuk penyelesaian otomatis, saya menemukan mode perusahaan sangat berguna.
Sungguh emacs dapat dibuat untuk melakukan apa saja.
sumber
Dalam beberapa tahun terakhir, Dentang menjadi bagian penting dari dukungan Emacs C ++. Atila Neves berbicara tentang CppCon 2015: "Emacs as a C ++ IDE"
Ini adalah pembicaraan 16 menit, di mana ia menunjukkan solusi untuk topik-topik berikut:
Slide dapat ditemukan di sini .
sumber
Dalam gaya Unix atau X windows, saya tidak tahu bahwa ada IDE terintegrasi yang bekerja untuk semuanya.
Untuk berinteraksi dengan debugger, cukup satu komponen IDE, pertimbangkan realgud . Hal lain yang menurut saya berguna adalah parser untuk pesan lokasi, sehingga jika Anda memiliki jejak stack panggilan dan ingin mengedit di tempat tertentu di callstack, antarmuka front-end ini akan dapat melakukannya.
Sejauh ini program ini bisa menggunakan peningkatan. Tapi kemudian bisa juga menggunakan orang yang bekerja untuk memperbaikinya.
Penafian: Saya mengerjakan realgud
sumber
Coba mode-lsp. Sekarang Anda dapat menggunakan fungsionalitas IDE lain di dalam emacs yang terhubung ke server. Cari info lebih lanjut: lsp-mode
sumber