2011-01-17 4 views
7

Podoba mi się każdy komentarz, który pojawia się w osobnej linii. Nie lubię dodawać komentarzy do tej samej linii, w której kod jest włączony. W niektórych językach można napisać blok komentarza, taki jak:Automatyczne rozwijanie bloków komentarzy w emacs

/** 
* I am a comment block. This comment block will be automatically expanded by the 
* IDE such that it can contain all of the text in this block. 
**/ 

Podoba mi się to. Podoba mi się, jak blok komentarza wciąż dostaje więcej linii, gdy dodaję do niego więcej tekstu. Lubię, jak wstawię tekst w dowolnym punkcie bloku, następny tekst zostanie przesunięty w dół, tak aby żaden tekst nie przekraczał określonego punktu po prawej stronie. Używam Pythona. Python nie ma komentarza bloku wielowierszowego. Sądzę, że najbliżej można uzyskać:

# I am a comment block. This comment block will NOT be automatically expanded by 
# the IDE, because it does not recognize these two comment lines as being joined. 

Używam również emacs. Zastanawiam się tylko, czy ktoś ma jakieś sprytne rozwiązanie, takie, że może otworzyć blok komentarzy i po prostu zacząć pisać. Nie martw się, że musisz nacisnąć przycisk powrotu, aby przejść do następnej linii, gdy szerokość linii komentarza jest zbyt duża. Bez konieczności ponownego losowania komentarza jako całości, gdy chcesz wstawić w bloku komentarza. Jakieś pomysły?

Podsumowanie: Szukam sposobu na wykonywanie wielowierszowych ciągłych komentarzy (dla Pythona) w emacs, bez konieczności ręcznego formatowania tekstu w samym bloku komentarza.

Dziękuję

Odpowiedz

4

auto-fill-mode wydaje się robić to, co chcesz. Gdy długość linii przekroczy wartość fill-column, spowoduje to przerwanie linii i wstawienie nowej linii komentarza.

Nie jest to jednak w pełni automatyczne, jeśli tekst zostanie wstawiony między, do uzupełnienia trzeba będzie nacisnąć M-q.

[Edytuj: tutaj jest sposób na zmyślenie polecenia "spacja". Po każdym naciśnięciu SPC komentarz blok będzie uzupełniana:

(defun refill-when-in-comment() 
    (interactive) 
    (let ((curr-face (get-char-property (point) 'face))) 
    (if (member "comment" (split-string (prin1-to-string curr-face) "-")) 
     (fill-paragraph t) 
    ) 
    ) 
) 

(defun smart-space (arg) 
    (interactive "P") 
    (refill-when-in-comment) 
    (self-insert-command (prefix-numeric-value arg)) 
) 

(global-set-key " " 'smart-space) 

to działa dla Ciebie?

+0

+1. Wpisz swój komentarz jako zwykły tekst, zaznacz go i wykonaj "M-q", aby go wypełnić. –

+0

Zobacz również tryb napełniania, aby automagicznie wykonać ponowne napełnianie. http://www.emacswiki.org/emacs/RefillMode Jest to część emacs od wersji 21.2. Nie próbowałem go używać w komentarzach do kodu. Moim jedynym zmartwieniem byłoby to, że "wypełniłoby" rzeczywisty kod, oprócz wypełniania komentarzy. oczywiście byłoby źle. – Cheeso

2

Jest to trochę niekonwencjonalne, ale nie jesteś ograniczony do używania ciągów jako komentarzy tylko do docstrings. Jedyną magiczną częścią posiadania ich jako pierwszego przedmiotu jest to, że zostaną przypisane do metody obiektów. Mogą być stosowane w dowolnym miejscu i choć nie wpłynie na wydajność na wszystkich

>>> import dis 
>>> def test(): 
...  """This is a standard doc string""" 
...  a = 3 # This will get compiled 
...  """This is a non standard doc string and will not get compiled""" 
... 
>>> dis.dis(test) 
    3   0 LOAD_CONST    1 (3) 
       3 STORE_FAST    0 (a) 

    4   6 LOAD_CONST    2 (None) 
       9 RETURN_VALUE 

Można zobaczyć, że wygenerowany kod nie zawiera żadnego odniesienia do jednej z dwóch łańcuchów.

Wspominam tylko o tym, ponieważ łańcuchy dokumentów wydają się mieć wszystkie funkcje, o które prosisz. Jest nieco niestandardowy, chociaż nie widzę z nim problemu. Komentarze wielowierszowe byłyby miłe.