Jestem fanem sposobu, w jaki Atom i Sublime Text obsługują składanie linii, w którym widoczna jest pierwsza linia każdego zagięcia (wraz z podświetlaniem składni), a na końcu linii, który wskazuje zagięcie, dołączany jest znacznik.
Zobacz zrzut ekranu poniżej porównujący składanie wcięć Vima (u góry) w porównaniu z Atomem (u dołu):
Vim poświęca dwie linie dla każdego zagięcia. Pierwsza linia służy jako nagłówek, a druga linia opisuje niektóre informacje na temat zagięcia (liczba linii i tekstu wewnątrz zagięcia).
Atom używa tylko jednej linii i używa małego znacznika na końcu linii, aby wskazać fałd, wraz z kolorem dodanym do numerów linii po lewej stronie. Styl składania Atom wykorzystuje mniej nieruchomości na ekranie, ale nadal przekazuje wszystkie informacje, których naprawdę potrzebuję.
Jestem stronnikiem stylu składania Atom. Moim zdaniem wydaje się czystszy i bardziej spójny, szczególnie przy zestawianiu wielu metod lub atrybutów z rzędu (jak na powyższym zrzucie ekranu).
Czy istnieje sposób na przybliżenie przybliżenia stylu składania Atom w Vimie?
from __future__ import braces
) ... Jak skonfigurowałeś składanie? Czy możesz wkleić ten fragment kodu (lub inny, który pokazuje problem)? Vim pasuje do jednej linii, ale jak wspomniano muru, twoje foldy zaczynają linię późno.Odpowiedzi:
Dwie linie vs. jedna linia
W Vimie wszystkie linie w folderze zostaną zwinięte do pojedynczej linii, a
'foldtext'
następnie opcja określa streszczenie tych linii (zwykle myślniki, liczbę złożonych linii i treść z pierwszych (lub wszystkich) linii).W twoim przykładzie w Vim tylko
{...}
sam blok parametrów jest zwinięty; linia powyżej (która wykorzystuje parametry) nie jest częścią zakładki. Natomiast w drugim edytorze ta linia z parametrami należy do fold, a jej tekstem (używając terminologii Vima) jest zawartość tego wiersza plus dołączony znacznik.Dostosowanie
W Vimie fałdy mogą być generowane na różne sposoby (patrz
:help fold-methods
) i zależą'filetype'
od bufora. Trudność włączenia powyższej linii do zakładki zależy od tego; sprawdź z:setlocal foldmethod?
. Dzięki składaniu wcięć nie ma na nic wpływu; musisz przejść na inną metodę. W przypadku składania składni oznaczałoby to dostosowanie definicji składni i może być bardzo trudne. Będziesz miał więcej szczęścia, jeśli użyjesz wyrażenia , ale nadal oznaczałoby to zrozumienie i zmianę logiki. (Jest mało prawdopodobne, że autor wtyczki typu pliku dostarczył konfigurację, aby na to wpłynąć).Podświetlanie składni linii złożonej
To niestety nie jest możliwe. Vim zawsze używa
Folded
grupy wyróżnień dla całej złożonej linii. Możesz to poprawić za pomocą:highlight
poleceń w swoim pliku~/.vimrc
, ale indywidualne zróżnicowanie składni zostanie utracone.źródło
Vim już wyświetla fałdy jako pojedynczą linię. Jednak podczas
indent
składania Vima wszystkie linie, które mają to samo wcięcie, są uwzględniane w fold. Tak więc na twoim zrzucie ekranu linie, które określasz jako „nagłówki” (np. Ten rozpoczynający sięcollection_base_url
), nie mieszczą się w fałdach.Za pomocą Vima możesz osiągnąć coś podobnego do składania Atomu
foldexpr
foldmethod
:To definiuje wyrażenie krotnie (patrz
:help fold-expr
) w następujący sposób:"<N"
, w którym N jest ustawione na wcięcie. To mówi Vimowi, że fałd poziomu N kończy się na tej linii.Aktualizacja
@alxndr pyta w komentarzach, czy można to rozszerzyć tak, aby obejmowało odległe
end
s Ruby w foldach . Możesz zacząć od zastąpienia" Calculate indent level
sekcji następującymi:W tej chwili nie jest to najbardziej niezawodne rozwiązanie (np. Nie powiedzie się, jeśli
end
instrukcja znajduje się w tej samej linii, po średniku). Możesz poprawić kod wyrażenia regularnego i otaczający go kod, aby rozwiązać ten problem, ale ponieważ jesteś teraz w obszarze analizowania faktycznej składni pliku, podejrzewam, że sprawy mogą się skomplikować, zanim będziesz mieć dobre rozwiązanie.źródło
end
do ukończenia bloku?...
na końcu wiersza jako symbol złożonego bloku tekstu, jest bardzo przydatne i sprawia, że mniej rozpraszam uwagę niż konieczność podświetlania całego pierwszego wiersza bloku tekstu jak w vimie. Próbowałem twojego foldu powyżej z domyślnym zachowaniem foldowania vima, prosty nie działa. Jak mieć fold, który daje znak na końcu pierwszego wiersza bloku tekstowego pythonem? Czy powinienem otworzyć nowe pytanie? Właśnie testuję ponownie twój fold, to naprawdę działa bardzo dobrze z linią wcięcia. Super dzięki.