Mam plik pełen tekstu (np. Markdown lub LaTeX). Chciałbym policzyć liczbę słów w części tego pliku.
Wiem, że mogę zrobić, :! wc -w %aby uruchomić wc -w na bieżącym buforze. I wiem, że mogę wciągnąć interesującą sekcję do rejestru nazwanego. Zgaduję, że istnieje sposób wysłania nazwanego rejestru do systemu operacyjnego w celu użycia go w poleceniu lub potoku, ale nie udało mi się go znaleźć. Czy jest lepszy sposób na policzenie słów w rejestrze?
Mój przypadek użycia polega na tym, że dużo piszę w języku innym niż programowanie (notatki, praca dyplomowa itp.) I chciałbym policzyć, ile słów dodałem do danej sekcji pliku w trakcie edycji sesja.
źródło
g<C-g>
. Niesamowite!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:
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: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 dlacmdline-ranges
. Jeśli chcesz to robić często, prawdopodobnie dobrze jest utworzyć dla niego mapowanie (lub polecenie). Ponadto, jeślihlsearch
włączyłeś, możesz chcieć uruchomić:nohlsearch
później, aby usunąć zaznaczenie.wc
sposóbTo 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: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ącu
. 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: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.źródło
\w
Początkowo używanie brzmi jak niezły pomysł, ale po przetestowaniu go znalazłem wiele problemów. Najważniejsze jest to, że nie będzie pasowało do znaków innych niż ascii, więc słowo podobneüber
jest po prostu pomijane ( wczoraj było pytanie o to ). Również słowo podobnee-mail
jest liczone jako 2 słowa, ponieważ-
nie występuje w nim\w
(użycie a-
jest dość rzadkie w języku angielskim, ale bardzo powszechne na przykład w języku niderlandzkim). Mogą istnieć inne postacie, które są ignorowane w ten sposób, co prowadzi nas do ostatniego punktu: konwencje dotyczące tego, co uważa się za „słowo” mogą się różnić ...wc
mogą przechwytywać ustawienia regionalne (nie wiem, czy GNUwc
tak na marginesie sobie z tym radzi, narzędzia GNU nie są dobrze znane z doskonałej obsługi Unicode).wc
rozwiązania.Do słów użyj:
.
oznacza bieżącą linię.W moim pliku .vimrc umieściłem również:
Mogę pisać:
i
zzcw
rozszerzy się dos/\i\+/&/g
To
zzcw
po prostu dziwne imię, które nic nie pasuje (dla mnie).Efektem ubocznym jest zaznaczenie i wyróżnienie całego pliku.
Chciałem móc wpisywać tweety wieloliniowe w pliku, upewnić się, że nie ma zbyt wielu znaków i wkleić tweet na Twitterze.
źródło