GÜNCELLEME : Bu sorunu ve daha fazlasını tamamen çözen Semantic Refactor paketini oluşturdum . Nasıl çalıştığını görmek için demolara bakabilirsiniz . Bu cümlenin ardından bu cevabın kalan metni eskidir ve sadece tarihsel bir sebepten dolayı oraya koymuştur.
ESKİ CEVAP :
senator-copy-tag
İşlev imzasını doğru bir şekilde kopyalamak için kullanabilir , ardından kaynak dosyanıza geri yapıştırabilirsiniz. senator-copy-tag
ve Senatör komutları aşağıdakileri etkinleştirdiğinizde kullanılabilir semantic-mode
:
(semantic-mode 1)
Semantik bir Emacs yerleşik paketidir.
Semantik Senatör'ü Mermi ile birleştirerek, işlev prototipini projenizdeki herhangi bir yerden başka bir dosyaya (aynı ada ancak farklı uzantıya sahip dosya) ekleme komutuyla birleştirebilirsiniz. Yalnızca bir dosya varsa, komut hemen bu dosyaya eklenir; birden fazla ise, bir dosya seçmeniz istenir; eğer yoksa, projenizdeki tüm dosyaları girmeniz istenir. Bir dosya seçtikten sonra, bilgi istemi geçerli arabellekte sonradan eklemeyi seçebileceğiniz Anlamsal etiketlerin bir listesini sunar.
Ben gönderilen bir PR için Emacs Refactor . PR'yi beklemeden denemek istiyorsanız tam kod: buraya tıklayın .
İşte bir demo ( START DEMO
altta gördüğünüzde başlar ):
Prototip kopyalamak ve işlevini yerine getirmek için yalnızca Senatör'ü kullanabilirsiniz. Nokta, işlev imzası veya işlev gövdesi içinde herhangi bir yerde olduğu sürece, varsayılan senator-copy-tag
olarak bağlı olan run , C-c , M-w
tüm işlevi kopyalar: hem imza hem de gövde. Ancak, varsayılan senator-yank-tag
olarak bağlı olan komutu çalıştırarak yalnızca imzayı yapıştırabilirsiniz C-c , C-y
. Basılarak C-y
tüm işlev imzası gövdesi ile birlikte yapıştırılır. senator-copy-tag
hatta bu gibi birden çok satıra genişletilmiş fonksiyon imzası ile çalışır:
void
func(int a,
int b,
int c)
{
.....
}
Bu yaklaşım aynı ada sahip ara belleğe doğrudan eklenmese de, diğer durumlarda daha uygulanabilir. Kullanım durumunuz yalnızca aynı dizinde ve aynı ada ancak farklı uzantılara sahip iki dosyanız varsa çalışır. İşlev bildirimi ve işlev tanımı farklı adlara sahip farklı dosyalarda kalmalıdırsa ne olur?
EDIT2 : Semantik etiketleri kullanarak fonksiyon prototipinin akıllıca eklenmesi için bir örnek. Şu anda, yalnızca üst düzey Anlamsal etiketlerin göreli konumlarına ("önce" ve "sonra") dayanarak ekleyebilirsiniz. Ben Semantik etiketlerinin daha pozisyonlarla mevcuttur herhangi bir yerde eklemek için muktedir yapmak kullanıcıya güncellenir (bir etiket, bir zaman yani Class
:, ek pozisyonları sunmalıdır public
, projected
ve private
). Demo START DEMO
, altta gördüğünüzde başlar :
Bonus : .cpp
Bir başlık dosyasındaki bir dosyada boş işlev tanımlarının bir listesini oluşturmak istiyorsanız member-function.el dosyasını kullanın . Ama yakında, Semantik + Mermi ile değiştireceğim.