Mam wiele bloków tekstu, innymi słowy, wiele funkcji takich jak to:
def ==(other)
...
end
def to_s(full=false)
...
end
def to_a
...
end
def to_hash
...
end
def inspect
...
end
Chcę posortować funkcje alfabetycznie według sygnatury funkcji. Jak można to najłatwiej zrobić w Vimie?
def ...
. Korzystam z Linuksa, więc każde z tych narzędzi będzie dla mnie działać.Odpowiedzi:
Jest to stosunkowo proste (i, moim zdaniem, bliskie temu, co miał na myśli Jason):
zmień wszystkie funkcje w jedną linijkę, zastępując wszystkie nowe wiersze jakimś fantazyjnym charakterem:
posortuj te wkładki za pomocą:
rozwiń wszystkie funkcje z powrotem do ich początkowego stanu indywidualnego:
źródło
:g/./,/^$/-s/\n/§/g
, a następnie:%sort
, a następnies/§/\r/g
Napisałem wtyczkę AdvancedSorters, aby uprościć trzy oddzielne kroki podane w odpowiedzi @ romainl w jednym poleceniu:
Wzór tutaj jest nieco bardziej skomplikowany, aby poprawnie zawierać również oddzielające puste linie.
źródło
Najlepszym sposobem, w jaki mogę to zrobić bez napisania funkcji, która analizuje definicje, byłoby zastąpienie ograniczników linii nieprzedstawionych
end
innym unikalnym ogranicznikiem (+ EOL +?), A następnie:sort
ponowne podstawienie ograniczników linii. Prawdopodobnie można go zapisać do makra.Funkcja może być lepsza w przypadku, gdy chcesz użyć selekcji wizualnej.
źródło
Wypróbuj wtyczkę Vissort. Obsługuje funkcję sortowania bloków:
Jeśli brakuje jakichś argumentów, BlockSort () zapyta cię o nie. Wzory nextblock / endblock ograniczają blok, wzorzec findtag służy do znalezienia linii zawierającej „znacznik”, który zostanie użyty do sortowania; tagpat i tabsub są używane w zastępstwie do wyodrębnienia znacznika sortującego z wiersza zawierającego znacznik.
Możesz pobrać vissort.vim z http://www.drchip.org/astronaut/vim/index.html#VISSORT
źródło