3 ms·
> Isn't there a plugin to just display word count in the corner somewhere automatically? You can add it to your statusline (or tabline, ruler) with the wordcou
by arp242 3y ago
> Isn't there a plugin to just display word count in the corner somewhere automatically?
You can add it to your statusline (or tabline, ruler) with the wordcount() function:
:let &statusline ..= ' words: %{wordcount().words}'
---
Aside: that "one-liner" doesn't "count the words in the file" at all? It just replaces all words with "1" and echos the last line number. I'm confused because this seems so wrong that I may be missing something? Unless the "67 substitutions on 5 lines" message is intended as the "word count", in which case I submit that 1) this is the ugliest thing I've ever seen, and 2) the author of this article doesn't know Vim all that well (there are so many better/easier ways to do this).
- anorakoverflow 3y agoAlso, if I’m seeing this correctly, it only recognises ASCII “words” (a–z, A–Z, 0–9, _), so it’s not even accurate and will over-count words with accents, umlauts, etc.
- akovaski 3y agoIt actually increments each word it finds, so while most words will turn to "1", "356" will become "357". I have to imagine this ending up in the blog is the result of a copy-paste mistake, a LLM hallucination, or something similar. Others have commented on built-in vim functionality for counting words, but assuming the author copy-pasted a similar looking command, they may have intended something like: :%s/\w\+//gn Knowing that the n flag will return a count instead of doing the substitute may be useful to know, but I personally don't need a search count very often. Knowing that you can execute a vimscript expression on each search match using \= is also cool and I was unaware of such functionality. https://vimhelp.org/change.txt.html#sub-replace-expression https://vimhelp.org/change.txt.html#sub-replace-expression
- arp242 3y ago> It actually increments each word it finds Did you try it? Because that's not what it does. submatch(0) expands to the first submatch, which is the entire thing that's matched, and +1 adds 1 to this, which will a;ways result in "1" here since any string that doesn't start with a digit will be type-coerced to 0. Anyway, /n being intended sounds likely; I forgot that would report the number of matches. Still very odd how that got morphed to what's in the article.
- akovaski 3y ago> Did you try it? Yes > Because that's not what it does. [...] I don't see how your description significantly differs from my description.