Dans vim, je sais que nous pouvons utiliser ~
pour mettre en majuscule un seul caractère (comme mentionné dans cette question ), mais existe-t-il un moyen de mettre en majuscule la première lettre de chaque mot d'une sélection en utilisant vim?
Par exemple, si je souhaite passer de
hello world from stackoverflow
à
Hello World From Stackoverflow
Comment dois-je le faire dans vim?
Vous pouvez utiliser la substitution suivante:
s/\<./\u&/g
\<
correspond au début d'un mot.
correspond au premier caractère d'un mot\u
indique à Vim de mettre en majuscule le caractère suivant dans la chaîne de substitution (&)
&
signifie remplacer tout ce qui a été apparié sur le LHS:help case
dit:
To turn one line into title caps, make every first letter of a Word
uppercase: >
: s/\v<(.)(\w*)/\u\1\L\2/g
Explication:
: # Enter ex command line mode.
space # The space after the colon means that there is no
# address range i.e. line,line or % for entire
# file.
s/pattern/result/g # The overall search and replace command uses
# forward slashes. The g means to apply the
# change to every thing on the line. If there
# g is missing, then change just the first match
# is changed.
La partie motif a cette signification.
\v # Means to enter very magic mode.
< # Find the beginning of a Word boundary.
(.) # The first () construct is a capture group.
# Inside the () a single ., dot, means match any
# character.
(\w*) # The second () capture group contains \w*. This
# means find one or more Word caracters. \w* is
# shorthand for [a-zA-Z0-9_].
Le résultat ou la portion de remplacement a cette signification:
\u # Means to uppercase the following character.
\1 # Each () capture group is assigned a number
# from 1 to 9. \1 or back slash one says use what
# I captured in the first capture group.
\L # Means to lowercase all the following characters.
\2 # Use the second capture group
Résultat:
ROPER STATE PARK
Roper State Park
Une alternative au mode très magique:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g
# Each capture group requires a backslash to enable their meta
# character meaning i.e. "\(\)" verses "()".
Le wiki Vim Tips a un mappage TwiddleCase qui fait basculer la sélection visuelle en minuscules, MAJUSCULES et casse de titre.
Si vous ajoutez la fonction TwiddleCase
à votre .vimrc
, il vous suffit ensuite de sélectionner visuellement le texte souhaité et d'appuyer sur le caractère tilde ~
pour parcourir chaque cas.
Essayez cette expression régulière ..
s/ \w/ \u&/g
Il y a aussi le très utile vim-titlecase
plugin pour cela.