Zwijanie instrukcji programu Visual Studio C #

180

Podczas edycji naprawdę długich bloków kodu (które i tak zdecydowanie powinny zostać zrefaktoryzowane, ale to wykracza poza zakres tego pytania), często tęsknię za możliwością zwinięcia bloków instrukcji, tak jak można zwinąć bloki funkcyjne. Innymi słowy, byłoby wspaniale, gdyby ikona minus pojawiła się na konspekcie kodu dla wszystkiego zawartego w nawiasach klamrowych. Wydaje się, że pojawia się dla funkcji, klas, regionów, przestrzeni nazw, zastosowań, ale nie dla bloków warunkowych lub iteracyjnych. Byłoby fantastycznie, gdybym mógł zawalić takie rzeczy, jak ifs, przełączniki, kazania, tego rodzaju rzeczy!

Zagłębiając się w to trochę, odkryłem, że najwyraźniej zarysowanie C ++ w VS pozwala na to, ale zarysowanie C # w VS nie. Naprawdę nie rozumiem dlaczego. Nawet Notatnik ++ tak się zawali, jeśli wybiorę formatowanie w C #, więc nie rozumiem, dlaczego Visual Studio tego nie robi.

Czy ktoś wie o dodatku VS2008, który umożliwi takie zachowanie? A może jakieś ukryte ustawienie?

Zredagowano, aby dodać: wstawianie regionów jest oczywiście opcją i już mi się przydarzyło, ale szczerze mówiąc, nie powinienem musiałem owijać rzeczy w region, który jest już owinięty nawiasami klamrowymi ... gdybym miał edytować istniejący kod, po prostu zrefaktoryzuję go, aby i tak lepiej rozdzielić problem. („zawijanie” nowymi metodami zamiast regionów;)

Grank
źródło
6
BTW: Odkryłem, że te dwa skróty ułatwiły mi życie: Przełącz kontur: Ctrl + M, M Zwiń wszystko: Ctrl + M, O
Gaurav
2
Ctrl + M, L przełącza rekurencyjne zwinięcie / rozwinięcie. Oczywiście może to pozostawić jedną linię. Wewnątrz tej linii (Ctrl + M, M) pozostawia ładnie podsumowany plik.
patridge
2
Oto odpowiednik wtyczki dla VS 2012: stackoverflow.com/questions/18388280/…
Spójrz
powiązane: Problem ze zwijaniem kodu autor: Jeff Atwood, 2008
Nick Alexeev

Odpowiedzi:

267

Począwszy od Visual Studio 2017, zwijanie instrukcji jest wbudowane.

Istnieje kilka rozszerzeń, które wykonują to zadanie dla wersji VS sprzed 2017, począwszy od wersji VS 2010:

Ostatnie rozszerzenie obsługuje tylko VS 2015 i VS 2017, ale jest najmocniejsze.
Obsługuje kolorowanie składni w zwiniętych blokach, jest bardziej odporny na błędy i zoptymalizowany.

Jeśli rozszerzenie nie wydaje się instalować po użyciu przeglądarki do pobrania, spróbuj użyć wbudowanego menedżera rozszerzeń Visual Studio.

Skyblade
źródło
To wspaniale, tak długo szukałem czegoś takiego. Powinna być prawdziwa odpowiedź! (Ale tylko jeśli używasz VS2010 w wersji
nieekspresyjnej
To rozszerzenie jest świetne, ale nie działa na modułach obsługi (.ashx)
Jemsworld,
3
Fakt, że potrzebujemy nawet tej wtyczki do programu Visual Studio, jest zadziwiający. To powinno być standardowe zachowanie. Dobroć.
Ryan Rodemoyer
@Odys, odinstaluj, a następnie ponownie zainstaluj rozszerzenie, aby naprawić problem Ctrl M + O.
Shahedur Rahman,
21

Nie znam dodatków, ale wspomniałeś o regionach i nie widzę nic złego w robieniu czegoś takiego ...

foreach (Item i in Items)
{
  #region something big happening here
  ...
  #endregion

  #region something big happening here too
  ...
  #endregion

  #region something big happening here also
  ...
  #endregion
}

EDYCJA: W odpowiedzi na pytanie EDYCJA: Masz rację, trzymanie wszędzie wielu regionów nie jest idealne, a refaktoryzacja jest prawdopodobnie dobrym rozwiązaniem. Wygląda jednak na to, że szukasz czegoś magicznego, co „uporządkuje” kod dla ciebie i nie sądzę, aby istniał.

Kon
źródło
IIRC, nie można zdefiniować regionów w ramach funkcji.
Joel Coehoorn
10
jego kod jest poprawny; nie jesteś ograniczony do miejsca, w którym możesz zdefiniować takie regiony (o ile nie kończysz poza zakresem początku)
Jan
3
Zobacz edycję oryginalnego pytania; wymagane ręczne działanie ze strony programisty (nawet przy użyciu skrótu do zawijania regionu jednym lub dwoma kliknięciami) tak naprawdę nie odpowiada na pytanie / chęć, aby zrobić to automatycznie
Grank,
1
@Joel Wydaje mi się, że myślisz o VB.NET
Bryan Anderson,
Wszystkie wtyczki, które znajdziesz w tym wątku, są lepsze niż używanie regionów. Noc i dzień.
Spójrz
19

Możesz zwinąć określone bloki tekstu w Visual Studio, ale musisz wyłączyć automatyczne tworzenie konturów.

Kliknij prawym przyciskiem myszy okno kodu i wybierz (Tworzenie konspektu | Zatrzymaj tworzenie konspektu)

Następnie zaznacz tekst, kliknij prawym przyciskiem myszy i wybierz (Tworzenie konspektu | Ukryj zaznaczenie)

Po ponownym włączeniu automatycznego tworzenia konturów niestandardowe „Regiony” nie będą się już zwijać.

Matt Brunell
źródło
3
Słusznie. Mam nadzieję, że znajdę w tym pytaniu sposób na dodanie tych bloków do automatycznego tworzenia konturów, ponieważ tak naprawdę nie ma sensu, aby tak nie było.
Grank
1
Matt, możesz to zrobić (w VS 2012) bez zatrzymywania automatycznego tworzenia konturów. Wystarczy zaznaczyć tekst i obrys> ukryć zaznaczenie
nawfal
3

Program Visual Studio 2008 obsługuje regiony wewnątrz funkcji, o ile są one utrzymywane na tym samym poziomie hierarchii kodu

#region Won't work
for(int i = 0; i<Count; i++)
{
//do something
#endregion
}

for(int i=0; i<Count; i++)
{
#region Works fine
//do lots of stuff
#endregion
}
Chris Marisic
źródło
5
Nie jest to nowość w 2008 roku. 2005 również to obsługuje.
Kon
3

Pozwól, że powiem coś innego: naciśnij (ctrl+m,ctrl+h)lub w edycji> konspektu> ukryj zaznaczenie, jest to bardzo przydatne.

M at
źródło
1
@Mahdi pytanie dotyczyło narzędzia, które zwinie bloki kodu. Klikasz jakąś kombinację, a pętle ifs, for / while itp. Są zwinięte, dzięki czemu możesz odczytać kod na najwyższym możliwym poziomie. Potem zagłębisz się w kod. Twoje rozwiązanie nie jest wykonalne, ponieważ musisz najpierw zwinąć wszystkie regiony i nie widzisz, który to dokładnie region. Powodzenia w przyszłości.
Rzymian
1
możesz najpierw coś skomentować, a następnie ukryć pod tym, aby było to łatwiejsze i bardziej elastyczne
M o
0

Dodam tutaj, że w VS 2010 Microsoft dodał funkcje adornera WPF za pomocą Managed Extensibility Framework (MEF), pozwoli nam to rozszerzyć edytor kodu źródłowego, aby zorganizować je w znacznie lepszy sposób, aby był bardziej czytelny i dostępny.

Na przykład wizualizator komentarzy podsumowujących, który Scott Gu pokazał na PDC 2008 .

Czekamy więc na lepsze jutro dla programistów :)

Vin
źródło
0

Coderush nakreśli dla ciebie wszystkie bloki kodu. Nie jestem pewien, czy pozwala to na powiększanie / zwijanie bloków, ale konturowanie jest kolejną najlepszą rzeczą. Używam resharper zamiast coderush, który, o ile wiem, nie zapewnia zwalniania bloków :(

goku_da_master
źródło
0

Znalazłem to dla Visual Studio 2013 i uważam to za bardzo pomocne. Działa, nawet jeśli wokół kodu wstawisz proste nawiasy klamrowe za pomocą {.....}

Po udostępnieniu znalazłem, że ktoś jeszcze wspomniał o tym linku. Mój głos jest również na to narzędzie.

C # Outlineing Tool for Visual Studio 2013

Budowniczy
źródło
0

W VS2017 możesz podświetlić sekcję kodu, kliknąć prawym przyciskiem myszy, Tworzenie konspektu> Ukryj wybór. Spowoduje to zwinięcie kodu i przejście do podświetlonej sekcji.

Loflin A.
źródło
-2

# region, # endregion to inteligentna opcja.


źródło
10
Reguła StyleCop SA1123: DoNotPlaceRegionsWithinElements: Naruszenie tej reguły występuje za każdym razem, gdy region jest umieszczony w treści elementu kodu. W wielu edytorach, w tym Visual Studio, region będzie domyślnie zwinięty, ukrywając kod w regionie. Zasadniczo ukrywanie kodu w ciele elementu jest złą praktyką, ponieważ może to prowadzić do złych decyzji, ponieważ kod jest utrzymywany z czasem.
Sam Harwell,