Fajna sztuczka - pod warunkiem, że słowo kluczowe „KONIEC” (które oczywiście wybiera użytkownik) nie pojawia się w wierszu samodzielnie w materiale do skomentowania.
Jonathan Leffler
9
@kalengi: Tak; słowo użyte w cytatach może być dowolne; EOFjest klasycznym przykładem (i tak jest !, wykrzyknik na własną rękę), ale można użyć SNURFLE_BURGERSalbo classical_end_markerani żadnego innego słowa, które nie pojawiają się na linii na własną rękę w zakomentowanych materiału. Byłbym obrzydliwy w eksperymentowaniu ze spacjami itp., Ale słowo to równie dobrze może z nimi współpracować.
Jonathan Leffler
4
To na pewno działa, ale czy ktoś może wyjaśnić, jak to działa? Dzięki
mbbce
5
@MB_CE, patrz stackoverflow.com/questions/32126653/… . To powiedziawszy - uruchamia polecenie ( :), które nie odczytuje danych wejściowych i zawsze kończy działanie z udaną wartością, i wysyła „komentarz” jako dane wejściowe. Niewiele.
Charles Duffy,
2
Uważam za niewiarygodnie brzydkie i mylące pisanie aktywnego kodu w celu stworzenia kodu pasywnego ... po prostu użyj dobrego starego trybu wyboru bloku i naciśnij #; jaki jest z tym duży problem?
Rusty75
90
Nie ma komentarza blokowego do skryptu powłoki.
Używając vi(tak, vi) możesz łatwo komentować od linii n do m
<ESC>:10,100s/^/#/
(który brzmi: od linii 10 do 100 zamień początek linii (^) znakiem #).
i un komentarz z
<ESC>:10,100s/^#//
(który brzmi: od linii 10 do 100 początek linii zastępczej (^), po której następuje # z zaznaczeniem //.)
vijest prawie uniwersalny wszędzie tam, gdzie jest /bin/sh.
Fajna sztuczka z wyrażeniem regularnym na vi, aby umieścić # przed wierszami.
Atiq Rahman
5
Tylko wskazówka - jeśli używasz vima, a to kończy podświetlanie początku każdej linii, dodaj |nohdo końca. Rura oddziela dodatkowe polecenia i nohnie nadaje się do podświetlenia. Podświetlanie wyszukiwanego terminu zostanie automatycznie wznowione przy następnym wyszukiwaniu czegoś. Przykład::10,100s/^/#/g|noh
Matthew
Potrzebuję tego do zautomatyzowania ze skryptu. Czy istnieje sposób, aby to zrobić dla pliku z vi bez potrzeby interakcji człowieka?
Timothy Swan
1
@TimothySwan Wyobrażam sobie, że program gawk lub sed mógłby to zrobić ... jakoś.
BeowulfNode42
mój preferowany sposób komentowania (lub prefiksowania) bloku za pomocą vi: przejdź do początku linii, którą chcesz rozpocząć komentowanie (np. <SHIFT>+G 10 <ENTER>wtedy 0lub w inny sposób, aby nawigować). Następnie użyj, <CTRL>+Vaby przejść do trybu blokowania wizualnego i wyróżnić początek wszystkich linii, które chcesz skomentować (w tym przykładzie 90 J). Następnie naciśnij, SHIFT+Iaby wstawić przed podświetlonym blokiem. Wpisz znak komentarza (np. #) I naciśnij, <ESC>aby zakończyć prefiks. Wyjaśnienie to brzmi bardzo długo, ale z mojego doświadczenia wynika, że w praktyce jest ono znacznie szybsze.
Ueffes,
52
Możesz użyć:
if[1-eq 0];then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."fi
Wydaje się, że działa to tylko tak, że skomentowany tekst jest w rzeczywistości kodem. Mam problemy z komentarzami do potoków i średników. Odpowiedź Sunny256 zadziałała.
swdev
jeszcze bardziej zwięzłe byłoby []; za pomocą testu, który jest
Justin Duncan
27
Poniższa powinien pracować sh, bash, kshi zsh.
Bloki kodu, które mają zostać skomentowane, można umieścić w środku BEGINCOMMENTi ENDCOMMENT:
[-z $BASH ]|| shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
Wykonanie powyższego kodu spowoduje:
This is outside the commented block
Aby odkomentować bloki kodu skomentowane, powiedzmy
Lubię to. Co jednak oznacza podwójny znak podkreślenia? Jak najlepiej mogę powiedzieć, że jest to tylko zmienna nazwa, zgodnie z konwencją, że powinna być traktowana jako prywatna?
chessofnerd
Zapewnia także podświetlanie składni w większości edytorów i można je wywołać w razie potrzeby za pomocą $ __, chociaż dla jasności sugerowałbym nazwę zmiennej, taką jak dokumentacja lub dokumenty.
Szczerze mówiąc, dlaczego tak dużo nadinżynierii ...
Uważam, że pisanie aktywnego kodu do generowania kodu pasywnego jest złą praktyką.
Moje rozwiązanie: większość redaktorów ma tryb wyboru bloku. Po prostu użyj go, aby dodać # do wszystkich linii, które chcesz skomentować. O co tyle szumu...
Przykład Notatnika:
Aby utworzyć: Alt - przesunięcie w dół, naciśnij #.
Aby usunąć: Alt-mousedrag w dół, strzałka Shift-prawa, usuń.
Użytkownik najprawdopodobniej jest w terminalu. Nie można założyć środowiska myszy.
Gary
Czy nadal istnieją? Zwykle edytuję w trybie graficznym i wklejam ponownie za pomocą vi, co byłoby łatwym obejściem.
Rusty75
2
Wariacją sztuczki tutaj-doc w zaakceptowanej odpowiedzi przez sunny256 jest użycie słów kluczowych Perl do komentowania. Jeśli twoje komentarze są w rzeczywistości dokumentacją, możesz zacząć korzystać ze składni Perla wewnątrz skomentowanego bloku, co pozwala wydrukować go ładnie sformatowanego, przekonwertować na stronę podręcznika itp.
O ile powłoka jest zaniepokojony, trzeba tylko zamienić 'END'z '=cut'.
echo "before comment":<<'=cut'=pod
=head1 NAME
podtest.sh -Example shell script with embedded POD documentation
etc.=cut
echo "after comment"
„##” pomaga mi łatwo znaleźć początek i koniec komentarza do bloku. Mogę nakleić cyfrę po „##”, jeśli mam ich kilka. Aby wyłączyć komentarz, po prostu wstawiam „1” w „[]”. Unikam też niektórych problemów z pojedynczymi cudzysłowami w komentarzowym bloku.
Odpowiedzi:
W bash:
'
I'
wokółEND
separatora są ważne, inaczej rzeczy wewnątrz bloku jak na przykład$(command)
zostanie rozpoznany i wykonany.Aby uzyskać wyjaśnienie, zobacz to i to pytanie.
źródło
EOF
jest klasycznym przykładem (i tak jest!
, wykrzyknik na własną rękę), ale można użyćSNURFLE_BURGERS
alboclassical_end_marker
ani żadnego innego słowa, które nie pojawiają się na linii na własną rękę w zakomentowanych materiału. Byłbym obrzydliwy w eksperymentowaniu ze spacjami itp., Ale słowo to równie dobrze może z nimi współpracować.:
), które nie odczytuje danych wejściowych i zawsze kończy działanie z udaną wartością, i wysyła „komentarz” jako dane wejściowe. Niewiele.Nie ma komentarza blokowego do skryptu powłoki.
Używając
vi
(tak,vi
) możesz łatwo komentować od linii n do m(który brzmi: od linii 10 do 100 zamień początek linii (^) znakiem #).
i un komentarz z
(który brzmi: od linii 10 do 100 początek linii zastępczej (^), po której następuje # z zaznaczeniem //.)
vi
jest prawie uniwersalny wszędzie tam, gdzie jest/bin/sh
.źródło
|noh
do końca. Rura oddziela dodatkowe polecenia inoh
nie nadaje się do podświetlenia. Podświetlanie wyszukiwanego terminu zostanie automatycznie wznowione przy następnym wyszukiwaniu czegoś. Przykład::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
wtedy0
lub w inny sposób, aby nawigować). Następnie użyj,<CTRL>+V
aby przejść do trybu blokowania wizualnego i wyróżnić początek wszystkich linii, które chcesz skomentować (w tym przykładzie90 J
). Następnie naciśnij,SHIFT+I
aby wstawić przed podświetlonym blokiem. Wpisz znak komentarza (np.#
) I naciśnij,<ESC>
aby zakończyć prefiks. Wyjaśnienie to brzmi bardzo długo, ale z mojego doświadczenia wynika, że w praktyce jest ono znacznie szybsze.Możesz użyć:
źródło
if [ ];
działa.if false;
. stackoverflow.com/a/18019516/2097284Poniższa powinien pracować
sh
,bash
,ksh
izsh
.Bloki kodu, które mają zostać skomentowane, można umieścić w środku
BEGINCOMMENT
iENDCOMMENT
:Wykonanie powyższego kodu spowoduje:
Aby odkomentować bloki kodu skomentowane, powiedzmy
zamiast
w powyższym przykładzie.
źródło
jeśli potrafisz uniknąć pojedynczych cudzysłowów:
źródło
Użyj,
: '
aby otworzyć i'
zamknąć.Na przykład:
To jest przykład Vegas tutaj
źródło
W Vimie:
shift-V
(wejdź w tryb wizualny), w górę w dół zaznacz linie w bloku:s/^/#/
polecenie będzie wyglądać następująco:
wciśnij Enter
na przykład
źródło
:s/^#/
Możesz użyć trybu Visual Block Vi / Vima, który jest przeznaczony do takich rzeczy:
Odkomentowanie to:
Jest to interaktywny sposób vi wykonywania tego rodzaju rzeczy, zamiast liczenia lub odczytywania numerów linii.
Wreszcie, w Gvim używasz ctrl-q, aby przejść do trybu Visual Block, a nie ctrl-v (ponieważ jest to skrót do wklejania).
źródło
Szczerze mówiąc, dlaczego tak dużo nadinżynierii ...
Uważam, że pisanie aktywnego kodu do generowania kodu pasywnego jest złą praktyką.
Moje rozwiązanie: większość redaktorów ma tryb wyboru bloku. Po prostu użyj go, aby dodać # do wszystkich linii, które chcesz skomentować. O co tyle szumu...
Przykład Notatnika:
Aby utworzyć: Alt - przesunięcie w dół, naciśnij #.
Aby usunąć: Alt-mousedrag w dół, strzałka Shift-prawa, usuń.
źródło
Wariacją sztuczki tutaj-doc w zaakceptowanej odpowiedzi przez sunny256 jest użycie słów kluczowych Perl do komentowania. Jeśli twoje komentarze są w rzeczywistości dokumentacją, możesz zacząć korzystać ze składni Perla wewnątrz skomentowanego bloku, co pozwala wydrukować go ładnie sformatowanego, przekonwertować na stronę podręcznika itp.
O ile powłoka jest zaniepokojony, trzeba tylko zamienić
'END'
z'=cut'
.(Znaleziono w „ Osadzanie dokumentacji w skrypcie powłoki ”)
źródło
Innym trybem jest: jeśli Twój komentarz edytora NIE MA BLOKU komentarza,
GOTOWE
Działa z DOWOLNYM edytorem
źródło
Lubię jedną linię otwierającą i zamykającą:
„##” pomaga mi łatwo znaleźć początek i koniec komentarza do bloku. Mogę nakleić cyfrę po „##”, jeśli mam ich kilka. Aby wyłączyć komentarz, po prostu wstawiam „1” w „[]”. Unikam też niektórych problemów z pojedynczymi cudzysłowami w komentarzowym bloku.
źródło