Można to osiągnąć na dwa sposoby: sposób na czysty skrypt i wcsposób.
Czysty sposób vim
Aby to zrobić, możesz użyć polecenia Wyszukaj i zamień. Na przykład:
:%s/\<\w\{-}\>//gn
To, co robi, to zamiast zastąpienia danego wzoru czymś, po prostu zlicza wystąpienia tego wzoru. Wynika to z nflagi. Aby policzyć słowa w określonej sekcji (w tym przypadku wiersze od 5 do 15), możesz zrobić coś takiego:
:5,15s/\<\w\{-}\>//gn
Eliminuje to potrzebę szarpania zawartości zaznaczenia w rejestrze. Aby zobaczyć więcej możliwości wprowadzenia tego, co można zastąpić 5-15, przeczytaj temat pomocy dla cmdline-ranges. Jeśli chcesz to robić często, prawdopodobnie dobrze jest utworzyć dla niego mapowanie (lub polecenie). Ponadto, jeśli hlsearchwłączyłeś, możesz chcieć uruchomić :nohlsearchpóźniej, aby usunąć zaznaczenie.
wcsposób
To samo można osiągnąć wc. W ten sam sposób, w jaki możesz użyć cmdline-rangesdo wybrania obszaru za pomocą :spolecenia, możesz używać ich z poleceniami zewnętrznymi. Na przykład:
:5,15!wc -w
To uruchamia wiersze od 5 do 15 za pomocą wcpolecenia. Wadą tego jest to, że zastępuje ten zakres wierszy wynikiem polecenia. Możesz cofnąć tę zmianę, naciskając u. Zauważ również, że rozwiązanie vimscript może nie działać z różnymi językami, ponieważ \wnie pasuje do znaków, które normalnie byłyby znakami słów w innych językach. wcmoże w tym lepiej \w. Oto też fantazyjne polecenie, aby przyspieszyć to:
command -range=% -addr=lines WordCount execute '<count>!wc -w' | .y a | undo | echo @a
Zauważ, że to kasuje arejestr.
Uwaga
Wydaje się, że można to również osiągnąć w trybie wizualnym za pomocą g<C-g>kombinacji klawiszy. Wyjaśnij to w odpowiedzi Carpetsmokera.