CẬP NHẬT : Tôi đã tạo gói Semantic Refactor giải quyết hoàn toàn vấn đề này và hơn thế nữa. Bạn có thể nhìn vào các bản demo để xem nó hoạt động như thế nào. Các văn bản còn lại của câu trả lời này, sau câu này, đã cũ và đặt nó ở đó chỉ vì lý do lịch sử.
TRẢ LỜI :
Bạn có thể sử dụng senator-copy-tag
để sao chép chính xác chữ ký hàm, sau đó dán lại vào tệp nguồn của bạn. senator-copy-tag
và các lệnh Thượng nghị sĩ khả dụng khi bạn bật semantic-mode
:
(semantic-mode 1)
Semantic là một gói tích hợp Emacs.
Bạn có thể kết hợp Semantic Senator với Projectile vào một lệnh để chèn nguyên mẫu hàm vào tệp khác (tệp có cùng tên nhưng phần mở rộng khác nhau) từ bất kỳ đâu trong dự án của bạn. Nếu chỉ có một tệp khác, lệnh sẽ chèn ngay vào tệp đó; nếu có nhiều hơn một, bạn được nhắc chọn một tệp; nếu không có, bạn được nhắc cho toàn bộ tệp trong dự án của bạn. Sau khi bạn chọn tệp, lời nhắc sẽ cung cấp danh sách các thẻ Semantic trong bộ đệm hiện tại mà bạn có thể chọn để chèn sau.
Tôi đã gửi một PR cho Emacs Refactor . Mã đầy đủ nếu bạn muốn thử mà không cần chờ PR: bấm vào đây .
Đây là một bản demo (nó bắt đầu khi bạn nhìn thấy START DEMO
ở phía dưới):
Bạn cũng có thể chỉ sử dụng Thượng nghị sĩ để sao chép và thực hiện chức năng nguyên mẫu. Miễn là điểm là bất cứ nơi nào bên trong chữ ký hàm hoặc thân hàm, chạy senator-copy-tag
, được ràng buộc C-c , M-w
theo mặc định, nó sao chép toàn bộ hàm: cả chữ ký và thân. Tuy nhiên, bạn chỉ có thể dán chữ ký nếu bạn muốn bằng cách chạy lệnh senator-yank-tag
, được ràng buộc C-c , C-y
theo mặc định. Nhấn C-y
dán toàn bộ chữ ký chức năng cùng với cơ thể của nó. senator-copy-tag
thậm chí hoạt động với chữ ký hàm được mở rộng trên nhiều dòng như thế này:
void
func(int a,
int b,
int c)
{
.....
}
Mặc dù cách tiếp cận này không chèn trực tiếp vào bộ đệm có cùng tên, nhưng nó được áp dụng nhiều hơn trong các trường hợp khác. Ca sử dụng của bạn chỉ hoạt động nếu bạn có hai tệp trong cùng một thư mục và có cùng tên nhưng các phần mở rộng khác nhau. Điều gì xảy ra nếu khai báo hàm và định nghĩa hàm phải ở trong các tệp khác nhau với các tên khác nhau?
EDIT2 : Đây là một ví dụ để chèn thông minh nguyên mẫu hàm bằng cách sử dụng các thẻ Semantic. Hiện tại, bạn chỉ có thể chèn dựa trên các vị trí tương đối ("trước" và "sau") của các thẻ Semantic cấp cao nhất. Tôi sẽ cập nhật để làm cho người sử dụng để có thể chèn vào bất kỳ nơi thẻ Semantic có sẵn, với vị trí hơn (tức là khi một thẻ là một Class
, cần cung cấp vị trí bổ sung: public
, projected
và private
). Bản demo bắt đầu khi bạn nhìn thấy START DEMO
ở phía dưới:
Phần thưởng : Nếu bạn muốn tạo một danh sách các định nghĩa hàm trống trong một .cpp
tệp từ tệp tiêu đề, hãy sử dụng thành viên-tests.el . Nhưng sẽ sớm thôi, tôi sẽ thay thế nó bằng Semantic + Projectile.