Emacs

2015-08-08 29 views
10

'daki #ifdef bloklarını gösterme Emacs'de geçerli #ifdef bloklarını göstermek mümkün mü (örn. Modda)? ÖrneğinEmacs

: Ben zaten saklambaç eğer-def modunu kullanıyorum pozisyonunda 2. içinde A & !(!B & C) pozisyonunda 1 imleci koymak ve göstermek eğer, mod hattında A göstermelidir

#ifdef A 
... | #cursor position num. 1 
#ifdef !B & C 
... 
#else /* !B & C */ 
foo(); | #cursor position num. 2 
#endif /* !B & C */ 
#endif /* A */ 

. Ama bazen #ifdef bloklarıyla çalışmam gerekiyor.

+0

Bir yanıt değil, 'C-c C-u'yu en yakın' # ifdef' örtüsüne atlamak oldukça yararlıdır. Daha sonra bulunduğunuz yere dönmek için 'C-u C- ' kullanabilirsiniz. –

cevap

3

WhichFunction ile her zaman başarılı olamadım, ancak C/C++ koduyla güzel çalışmalı. Bu özelleştirme, #ifdef bloğu içinde olduğunuzda size söyleyeceğiniz tanıma şemasına yeni bir işlev ekleyecektir.

(require 'which-func) 
(which-function-mode 1) 
(defun name-of-current-conditional() 
    "rather inelegant coding, but it works" 
    (interactive) 
    (let (outer) 
    (condition-case nil 
     (dotimes (myv 10) 
      (save-excursion 
      (c-up-conditional (1+ myv)) 
      (setq outer (buffer-substring-no-properties 
           (line-beginning-position) 
           (line-end-position))))) 
     (error nil)) 
    outer)) 
(setq which-func-functions '(name-of-current-conditional)) 
+0

Çalıştığınız için teşekkür ederim, ama sadece basit ifdef'leri kullanmanın faydalı olduğunu düşünüyorum. "Else" in altındayken "ifdef A" değerini gösterir. Bu durumda "ifdef! A" veya "ifndef A" yi görmek istiyorum. Ayrıca karmaşık "ifdefs" işlemez. Projemde çok fazla iç içe ifdefs var. Belki de böyle bir özelliği olması neredeyse imkansızdır. – folq

+0

@folq - Doğru, kod yazarken gerçek boole mantığını yapmak için kod istersiniz. Bunu bir araya getirmeye başlamak için kodumu kullanabilirsiniz, ama bu benim almak istediğimden daha büyük bir görev. –