98 votes

Mettre la première lettre de chaque mot en majuscule dans une sélection en utilisant Vim

Dans Vim, je sais que l'on peut utiliser ~ pour mettre en majuscule un seul caractère (comme indiqué dans le document 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 veux changer ceci

hello world from stack overflow

à

Hello World From Stack Overflow

comment dois-je faire dans Vim ?

205voto

Rohit Jain Points 90368

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 substituer ce qui a été mis en correspondance sur le côté gauche
  • g signifie substituer tous les matches, pas seulement le premier

61voto

ernix Points 1061

: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 portion du 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 characters. \w* is
                       # shorthand for [a-zA-Z0-9_].

La partie résultat ou 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. "\(\)" versus "()".

13voto

Ingo Karkat Points 61399

Le Wiki Vim Tips contient un Cartographie de TwiddleCase qui permet de basculer la sélection visuelle vers les minuscules, les majuscules et les majuscules de titre.

Si vous ajoutez le TwiddleCase à votre .vimrc il suffit ensuite de sélectionner visuellement le texte souhaité et d'appuyer sur le caractère tilde. ~ pour parcourir chaque cas.

2voto

Krishna Points 373

Essayez cette regex

s/ \w/ \u&/g

2voto

Michael Points 21
Option 1. -- Cette cartographie met en correspondance la clé q pour mettre en majuscule la lettre qui se trouve à la position du curseur, puis il passe au début du mot suivant :

carte q gUlw

Pour l'utiliser, placez le curseur au début de la ligne et appuyez sur la touche q une fois pour chaque mot pour mettre la première lettre en majuscule. Si vous voulez laisser la première lettre telle quelle, appuyez sur w pour passer au mot suivant.

Option 2. -- Ce mappage fait correspondre la clé q pour inverser la casse de la lettre à la position du curseur, puis il se déplace au début du mot suivant :

:map q ~w

Pour l'utiliser, placez le curseur au début de la ligne et tapez q une fois pour chaque mot pour inverser la casse de la première lettre. Si vous voulez laisser la première lettre telle qu'elle est, appuyez sur w pour passer au mot suivant.

Déplacer la cartographie. -- Pour démapper (supprimer) le mappage attribué à l'option q clé :

:unmap q

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X