Are you typing the title of an article or something else
that needs an uppercase letter at the start of every word? Do you need to
capitalize some text that isn't? It can be tedious to press the SHIFT key as you
enter the text or to use ~
(tilde) and
w
commands to change the text. The
following command capitalizes the first character of every word.
:s/\<./\u&/g
(You might be wondering why we didn't use :s/\<[a-z]/\u&/g
to match lowercase letters. The <
. actually matches the first character of
every word, but the \u
will only affect letters. So, unless you only want to
capitalize certain letters, <
. is
enough.)
The previous example does only the current line. You can add a range of lines after the colon. For example, to edit all lines in the file, type the following:
:%s/\<./\u&/g
To do the current line and the next five, use this:
:.,+5s/\<./\u&/g
To make the first character of each word uppercase (with \u
) and the rest lowercase (with \L
), try:
\(...\)...\1
Section 32.21
:s/\<\(.\)\([A-Za-z]*\)\>/\u\1\L\2/g
The previous command doesn't convert the back ends of words with hyphens (like
CD-ROM) or apostrophes (like
O'Reilly) to lowercase. That's because [A-Za-z]*\>
only matches words whose second
through last characters are all letters. You can add a hyphen or an apostrophe
to make that expression match more words, if you'd like.
Those commands can be a pain to type. If you use one of them a lot, try putting it in a keymap (Section 18.2).
— JP