PEMBARUAN : Saya membuat paket Semantic Refactor yang sepenuhnya menyelesaikan masalah ini dan banyak lagi. Anda dapat melihat demo untuk melihat cara kerjanya. Teks yang tersisa dari jawaban ini, setelah kalimat ini, sudah tua dan meletakkannya di sana hanya untuk alasan historis.
JAWABAN TUA :
Anda dapat menggunakan senator-copy-tag
untuk secara akurat menyalin tanda tangan fungsi, lalu menempel kembali di file sumber Anda. senator-copy-tag
dan perintah Senator tersedia saat Anda mengaktifkan semantic-mode
:
(semantic-mode 1)
Semantic adalah paket bawaan Emacs.
Anda dapat menggabungkan Senator Semantik dengan Proyektil ke dalam perintah untuk menyisipkan prototipe fungsi ke file lain (file dengan nama yang sama tetapi ekstensi berbeda) dari mana saja di proyek Anda. Jika hanya ada satu file lain, perintah memasukkan segera ke file itu; jika lebih dari satu, Anda diminta untuk memilih file; jika tidak ada, Anda akan diminta untuk seluruh file di proyek Anda. Setelah Anda memilih file, prompt menawarkan daftar tag Semantic di buffer saat ini yang dapat Anda pilih untuk disisipkan.
Saya menyerahkan PR ke Emacs Refactor . Kode lengkap jika Anda ingin mencoba tanpa menunggu PR: klik di sini .
Ini demo (dimulai ketika Anda melihat START DEMO
di bawah):
Anda juga dapat menggunakan hanya Senator untuk menyalin dan memfungsikan prototipe. Selama titik berada di mana saja di dalam fungsi tanda tangan atau fungsi tubuh, jalankan senator-copy-tag
, yang terikat C-c , M-w
secara default, itu menyalin seluruh fungsi: baik tanda tangan dan tubuh. Namun, Anda hanya dapat menempelkan tanda tangan jika Anda ingin dengan menjalankan perintah senator-yank-tag
, yang terikat C-c , C-y
secara default. Menekan C-y
tempelkan seluruh tanda tangan fungsi beserta tubuhnya. senator-copy-tag
bahkan bekerja dengan tanda tangan fungsi diperluas pada beberapa baris seperti ini:
void
func(int a,
int b,
int c)
{
.....
}
Meskipun pendekatan ini tidak memasukkan secara langsung ke buffer dengan nama yang sama, itu lebih berlaku dalam kasus lain. Kasing penggunaan Anda hanya berfungsi jika Anda memiliki dua file di direktori yang sama dan dengan nama yang sama tetapi ekstensi berbeda. Bagaimana jika deklarasi fungsi dan definisi fungsi harus tetap di file yang berbeda dengan nama yang berbeda?
EDIT2 : Berikut adalah contoh untuk penyisipan cerdas prototipe fungsi menggunakan tag Semantic. Saat ini, Anda hanya dapat menyisipkan berdasarkan posisi relatif ("sebelum" dan "setelah") tag Semantic tingkat atas. Saya akan update untuk membuat pengguna dapat memasukkan di tempat di mana tag Semantic yang tersedia, dengan posisi yang lebih (yaitu ketika tag adalah Class
, itu harus menawarkan posisi tambahan: public
, projected
dan private
). Demo dimulai ketika Anda melihat START DEMO
di bagian bawah:
Bonus : Jika Anda ingin membuat daftar definisi fungsi kosong dalam .cpp
file dari file header, gunakan member-functions.el . Tapi segera, saya akan menggantinya dengan Semantic + Projectile.