Vim - liczy linie w wybranym zakresie

83

Chcę liczyć linie w zakresie, bez względu na zakres, ale niech to będzie, powiedzmy, blok wizualny. Jaki jest najkrótszy sposób to zrobić. Przychodzi mi do głowy tylko coś takiego: '<,'>s/.//n ale nie wierzę, że to najkrótsza droga.

Czy ktoś może mi podpowiedzieć? Z góry dziękuję.

shabunc
źródło

Odpowiedzi:

141

W trybie wizualnym naciśnij gC-g

Typowy wynik:

Selected 7 of 22 Lines; 8 of 32 Words; 201 of 491 Chars; 201 of 497 Bytes-- VISUAL LINE --


Źródło : :he count-items( wykrywalne jako: :heTabTab... )

sehe
źródło
Świetny! Dziękuję za tę wskazówkę, jak tylko minie 10 minut, zaznaczę to jako odpowiedź) Ale interesujące jest jednak, czy w vimie jest funkcja. Jestem prawie pewien, że powinna istnieć funkcja.
shabunc
@shabunc: co masz na myśli mówiąc „czy w vimie jest funkcja”? Masz na myśli coś, co możesz :call? Twoje pytanie o tym nie wspominało.
Laurence Gonsalves
funkcja w sensie, jak inne funkcje wbudowane ( :h functions;)
shabunc
1
@shabunc Więc „tak”. W swoim pytaniu nie wspomniałeś, że chcesz mieć funkcję. Nie wierzę, że istnieje wbudowana funkcja do zliczania liczby linii w zakresie, ale możesz łatwo zdefiniować własną za pomocą dwóch wywołań do getpos()(które mogą zaakceptować znacznik jako dane wejściowe i zwrócić pozycję, w tym numer linii) i trochę odejmowania.
Laurence Gonsalves
1
@shabunc: Najbliżej mogę znaleźć to :perl $curbuf->Count(zwraca liczbę wierszy)
sehe
22

Ustaw opcję showcmd( :h 'sc'), a nigdy nie będziesz musiał niczego wpisywać, aby wiedzieć, ile linii jest zaznaczonych - na początku, ponieważ zapomniałem, że ustawiłem tę opcję, nie zrozumiałem sensu twojego pytania. ^^ '

W przeciwnym razie, jeśli chcesz uzyskać ten numer programowo, wystarczy:

:echo line("'>") - line("'<") + 1

Z zakresu funkcji można ją również uzyskać za pomocą a:lastline-a:firstline+1. ( :h function-range-example)

Luc Hermitte
źródło
8

'<,'>s///njest o jeden znak krótszy. :-)

Jeśli chcę tylko poznać liczbę linii w wizualnej selekcji, zwykle po prostu ją szarpię (uderzam y). W zależności od typu zaznaczenia powie „5 wyszarpanych wierszy” lub „Blok 5 wyrwanych linii”.

Laurence Gonsalves
źródło
2
ja też zwykle szarpię w tym celu. A dzisiaj nagle zdałem sobie sprawę, że nadszedł czas, aby nauczyć się czegoś nowego)))
shabunc