Można to osiągnąć na dwa sposoby: sposób na czysty skrypt i wc
sposó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 n
flagi. 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 hlsearch
włączyłeś, możesz chcieć uruchomić :nohlsearch
później, aby usunąć zaznaczenie.
wc
sposób
To samo można osiągnąć wc
. W ten sam sposób, w jaki możesz użyć cmdline-ranges
do wybrania obszaru za pomocą :s
polecenia, 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ą wc
polecenia. 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ż \w
nie pasuje do znaków, które normalnie byłyby znakami słów w innych językach. wc
moż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 a
rejestr.
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.