У меня есть файл, полный текста (скажем, Markdown или LaTeX). Я хотел бы посчитать количество слов в части этого файла.
Я знаю, что могу сделать :! wc -w %для запуска wc -w на текущий буфер. И я знаю, что могу вставить интересующий раздел в именованный регистр. Я предполагаю, что есть способ отправить именованный регистр в операционную систему для использования в команде или канале, но я не смог его найти. Или есть лучший способ считать слова в регистре?
Мой пример использования заключается в том, что я много пишу без программирования (заметки, тезисы и т. Д.) В vim, и я хотел бы посчитать, сколько слов я добавил в данный раздел файла в середине редактирования сессия.
источник
g<C-g>
этот способ. Потрясающие!Есть два способа, которыми это может быть достигнуто, чистый способ vimscript и
wc
способ.Чистый путь Vim
Вы можете использовать команду поиска и замены, чтобы сделать это. Например:
То, что это делает, вместо того, чтобы заменить данный шаблон чем-то, он просто считает вхождения шаблона. Это из-за
n
флага. Чтобы подсчитать слова в определенном разделе (в данном случае строки с 5 по 15), вы можете сделать что-то вроде этого:Это избавляет от необходимости вытягивать содержимое выбора в регистр. Чтобы увидеть больше возможностей для того, что можно поставить на место
5-15
, прочитайте раздел справки дляcmdline-ranges
. Если вы хотите делать это часто, вероятно, лучше создать для него отображение (или команду). Кроме того, если выhlsearch
включили, вы можете запустить:nohlsearch
позже, чтобы очистить выделение.wc
путьТо же самое можно сделать с помощью
wc
. Таким же образом вы можете использоватьcmdline-ranges
для выбора области с помощью:s
команды, вы можете использовать их с внешними командами. Например:Это запускает строки с 5 по 15 через
wc
команду. Недостатком этого является то, что он заменяет этот диапазон строк выходными данными команды. Вы можете отменить это изменение, нажавu
. Также обратите внимание, что решение vimscript может не работать с разными языками, потому\w
что не соответствует тому, что обычно является символами слова в других языках.wc
может быть лучше, чем\w
. Кроме того, вот необычная команда, чтобы сделать это быстрее:Обратите внимание, что это забивает
a
регистр.Запись
Похоже, что это также может быть выполнено в визуальном режиме с
g<C-g>
комбинацией клавиш. См. Ответ Carpetsmoker для объяснения этого.источник
\w
звучит как хорошая идея, но после тестирования я обнаружил ряд проблем. Самое большое, что он не будет соответствовать не-ascii символам, поэтому слово likeüber
просто пропускается ( вчера был вопрос об этом ). Кроме того, слово likee-mail
считается как 2 слова, так-
как его нет\w
(использование a-
несколько необычно в английском языке, но, например, очень часто встречается в голландском). Могут быть и другие персонажи, которые игнорируются таким образом, что подводит нас к моему последнему пункту: соглашения о том, что считать «словом», могут отличаться ...wc
могут появиться в локали (я не знаю,wc
кстати, действительно ли GNU справляется с этим, инструменты GNU не очень хорошо известны благодаря своей превосходной поддержке юникода).wc
решению.Для слов используйте:
.
обозначает текущую строку.Также я помещаю следующее в мой файл .vimrc:
Я могу печатать:
и
zzcw
расширится доs/\i\+/&/g
Это
zzcw
просто странное имя, которое не подходит ни для чего (для меня).Побочным эффектом является выделение и выделение всего файла.
Я хотел иметь возможность вводить многострочные твиты в файл, следить за тем, чтобы их было не слишком много, и вставлять твиты в твиттер.
источник