Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Статистика по файлу

Очень часто возникает надобность посчитать число слов в тексте, или символов, или символов кроме пробелов... или строк, скажем, или чего-нибудь еще. В некоторых популярных программных средствах такая возможность предусмотрена. В Вим тоже кое-что есть, но и базовые средства позволят Вам посчитать всё, что Вам будет угодно. Встроенное средство — это команда g<C-G>. Она выводит внизу (под строкой статуса) позицию курсора в пяти видах: столбец и строку, номер слова под курсором, номер символа и байт. Причем указывается и полное число этих сущностей. Вроде того, как на скриншоте. Последние два числа могут совпадать, если текст английский — тогда выводится только одно из них. Если сначала уйти в конец документа, то узнаете число слов и число символов в документе: Gg<C-G>. А можно выделить диапазон строк (V) и узнать число строк, символов, байт и слов в выделенном диапазоне. А что такое просто <C-G>? Это информация по файлу. Сколько строк, имя, процент текста выше курсора и кое-что ещё. При н

Очень часто возникает надобность посчитать число слов в тексте, или символов, или символов кроме пробелов... или строк, скажем, или чего-нибудь еще. В некоторых популярных программных средствах такая возможность предусмотрена. В Вим тоже кое-что есть, но и базовые средства позволят Вам посчитать всё, что Вам будет угодно.

Заметка про другую статистику, хотя диаграмму тоже можно построить. Но не средствами Вима.
Заметка про другую статистику, хотя диаграмму тоже можно построить. Но не средствами Вима.

Встроенное средство — это команда g<C-G>. Она выводит внизу (под строкой статуса) позицию курсора в пяти видах: столбец и строку, номер слова под курсором, номер символа и байт. Причем указывается и полное число этих сущностей. Вроде того, как на скриншоте.

Самая нижняя строка — это вывод команда g<C-G>. Над ней строка статуса, которую тоже надо настраивать, но это описано в другом материале. Ссылка ниже.
Самая нижняя строка — это вывод команда g<C-G>. Над ней строка статуса, которую тоже надо настраивать, но это описано в другом материале. Ссылка ниже.

Последние два числа могут совпадать, если текст английский — тогда выводится только одно из них. Если сначала уйти в конец документа, то узнаете число слов и число символов в документе: Gg<C-G>.

А можно выделить диапазон строк (V) и узнать число строк, символов, байт и слов в выделенном диапазоне.

А что такое просто <C-G>? Это информация по файлу. Сколько строк, имя, процент текста выше курсора и кое-что ещё. При настроенной строке статуса это всё и так нам известно. То же делает команда :file.

Теперь базовая техника. У нас есть команда замены

:%s///gn

Модификатор n предписывает только посчитать совпадения, не осуществляя замену; так что выражение замены вообще роли не играет. Используется обычно с модификатором g, который предписывает находить все совпадения, а не только одно на строку. Диапазон строк, в которых искать, указан вначале: знак % равносилен 1,$, то есть "все строки текста", то есть весь текст. Можно указать что-то другое (от 2,42 или -3,+3 до сложных фокусов, включая и фильтры строк) или просто выделить строки и применить команду к выделению. А вот что искать — зависит от задачи.

Если указать точку (любой символ, кроме конца строки):

%s/.//gn

то будут посчитаны символы. Если вместо точки поставить \S, то пробелы будут пропускаться. Можно считать только буквы, скажем: [a-zа-яё].

Если вам нужны слова, то можно так:

:s/\w\+//gn

но это только для латиницы. Можно явно указать множество символов, как показано выше. Если к слову относятся запятые и всё такое, то \S\+ сработает. Помним, что \+ обозначает "один или более, елико возможно больше".

Только помните, что в этом случае отдельно стоящая запятая пойдет как слово! А прилепленная к слову — будет его частью.

Можно посчитать предложения:

\C[A-ZА-ЯЁ][^.!?]*[.?!]\+\s*

Здесь мы предполагаем, что начинается предложение с большой буквы и кончается точкой или знаком (вопросительным или восклицательным). Ключ \C включает учет регистра, чтобы отличать заглавные от строчных. Класс с крышечкой [^.!?] НЕ содержит перечисленных символов, то есть там всё, кроме этого.

Знаков на конце может быть много... Может??? Конечно!!!

После предложения допускаются пробелы, хотя это большой роли не играет.

И последнее. Вы можете повесить команду на клавишу или создать меню, чтобы каждый раз не вспоминать выражение и не набирать довольно длинное. И будет у вас статистика, как в лучших домах. А можете таковую команду привязать к строке статуса и в реальном времени отслеживать, сколько слов вы набрали. Почему бы и нет?

Пожалуй, я расскажу, как это делать — но в другой раз.

Оглавление рубрики

Путеводитель по каналу