Comment convertir tout le texte en minuscules dans Vim


211

Comment convertir tout le texte de Vim en minuscules? Est-ce même possible?


Nous avons beaucoup de pages html avec tous les caractères en majuscules. Cela me fait gagner du temps en retapant tout en minuscules.
ksuralta

2
Avant la modification de la question, il s'agissait de savoir comment convertir tout le texte dans vim en petites majuscules. De toute évidence, il existe un cas d'utilisation pour convertir du texte en minuscules.
limonade

6
Le site Web de VIM a la réponse: vim.wikia.com/wiki/Switching_case_of_characters Merci.
fnds

Réponses:


122
  1. Si vous voulez vraiment dire des petites majuscules , alors non, ce n'est pas possible - tout comme il n'est pas possible de convertir du texte en gras ou en italique dans n'importe quel éditeur de texte (par opposition au traitement de texte ). Si vous souhaitez convertir du texte en minuscules, créez un bloc visuel et appuyez sur u(ou Upour convertir en majuscules). Tilde ( ~) en mode commande inverse la casse du caractère sous le curseur.

  2. Si vous voulez voir tout le texte dans Vim en petites majuscules, vous voudrez peut-être regarder l' guifontoption ou taper :set guifont=*si votre saveur Vim prend en charge le sélecteur de police GUI.


33
Je pense qu'il vaut la peine de mentionner que vous n'avez pas nécessairement à créer un bloc visuel pour mettre en minuscule un bloc de texte. guumettra en minuscule une ligne et gu[motion]mettra en minuscule la valeur du texte de ce mouvement. De même, gUUet gU[motion]travaillez de la même manière, uniquement pour les majuscules.
Zachary Murray

1
En fait, des petits caractères sont également possibles pour la plupart des lettres, en utilisant ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz.
gerrit

1
C'est juste un hack, cependant. Ceux-ci ne sont pas destinés à être utilisés comme des petites majuscules régulières et ne sont pas bien pris en charge par les polices. (Sur mon ordinateur de bureau, le F rend étrangement, sur mon téléphone, il ne rend pas du tout, pour donner un exemple.) Quoi qu'il en soit, une partie intéressante d'Unicode, merci!
2015

2
Cette réponse est incorrecte. user80168 a la bonne réponse.
Wayne Workman

401

Je suppose que vous voulez mettre le texte en minuscules. La solution est assez simple:

ggVGu

Explication:

  1. gg - va à la première ligne de texte
  2. V - active la sélection visuelle, en mode ligne
  3. G - va à la fin du fichier (au moment où vous avez sélectionné tout le texte)
  4. u - zone sélectionnée en minuscules

88
ou ggguG si vous voulez le faire sans sélection visuelle. : help gu
DrAl

18
utiliser du capital Upour les majuscules (par exemple ggVGU)
Nathan Wallace

42

Semblable à la solution de Mangledorf, mais plus court et convivial pour les profanes

:%s/.*/\L&/g


3
:%s/.*/\L&suffirait (pas besoin du gdrapeau car .*sélectionne toute la ligne)
Gordon Gustafson

1
Comme le ferait :%s/./\L&/g, puisque / g / dénote une opération qui est globale pour la ligne. Mais ce qui m'attire, c'est le &. Pourquoi est-ce nécessaire?
Braden Best

1
&signifie ici what was matched by the pattern, donc il peut être compris comme suit: remplacer .*par \Lowercase(what was matched by the pattern). Notez que l'appariement à l' .échelle mondiale est plus lent que l'appariement.*
Camusensei

39

utiliser cette option de mode de commande

ggguG


gg - Goto the first line 
g  - start to converting from current line    
u  - Convert into lower case for all characters
G  - To end of the file.

27

De nombreuses façons d'écorcher un chat ... voici la façon dont je viens de poster :


:%s/[A-Z]/\L&/g

De même pour les majuscules:


:%s/[a-z]/\U&/g

Je préfère cette façon parce que j'utilise cette construction ( :%s/[pattern]/replace/g) tout le temps donc c'est plus naturel.


Je pense qu'il y a une faute de frappe dans le dernier exemple («de même pour les majuscules») - l'expression régulière devrait changer en [az] plutôt qu'en «[AZ]».
monojohnny

1
:%s/./\U&/gfonctionne également. Il s'avère qu'il ignore les chiffres et les caractères non alphabétiques. Ce qui m'attire, c'est le &. Pourquoi \ U (ou \ L) n'est-il pas suffisant en soi? Pouvons-nous obtenir une explication à cela?
Braden Best

2
&est un remplaçant pour la chaîne correspondante. \U&Met donc en majuscule la chaîne correspondante afin qu'elle puisse être utilisée pour le remplacement.
Alec Jacobson

22
  • Basculez le cas "HellO" vers "BONJOUR" avec g ~ puis un mouvement.
  • "HellO" majuscule à "BONJOUR" avec gU puis un mouvement.
  • "HellO" minuscule à "bonjour" avec gu puis un mouvement.

Pour des exemples et plus d'informations, veuillez lire ceci: http://vim.wikia.com/wiki/Switching_case_of_characters


Je suppose que non, mais il y a une commande de substitution moins qu'intuitive pour cela dans la réponse de @mangledorf en remplaçant les caractères souhaités par la séquence d'échappement "\ L &" pour les minuscules et "\ U &" pour les majuscules. Ce qui m'attire, c'est le &. \ L et \ U sont parfaitement logiques, mais pourquoi est-ce &nécessaire?
Braden Best

9

utilisation ggguG

gg: va à la première ligne. gu: passer en minuscules. G: va à la dernière ligne.


En quoi cela diffère-t-il de la réponse de Kalanidhi?
MSeifert

A voté pour amener cela à 0, ce qui est un score adéquat pour une réponse qui est une copie d'une précédente. @MSeifert Les scores négatifs doivent être réservés aux solutions erronées / nuisibles
Titou

7

Habituellement Vu(ou VUpour les majuscules) est suffisant pour transformer toute la ligne en minuscules, car elle Vsélectionne déjà toute la ligne pour laquelle appliquer l'action.

Tilda ( ~) change la casse de la lettre individuelle , ce qui entraîne une affaire de chameau ou similaire.

C'est vraiment formidable de voir comment Vim dispose de nombreux modes différents pour faire face à diverses occasions et comment ces modes sont soigneusement organisés.

Par exemple, v- le véritable mode visuel, et les modes de Vligne visuelle et Ctrl+ Q- visuels associés (ce qui vous permet de sélectionner des blocs, une grande fonctionnalité que certains autres éditeurs avancés offrent également généralement en maintenant la Alttouche enfoncée et en sélectionnant le texte).


6

Si vous utilisez une version d'Unix

:0,$!tr "[A-Z]" "[a-z]"

4
Les crochets sont superflus, et une fois que vous les supprimez, les guillemets ne sont pas non plus nécessaires. :%!tr A-Z a-z
éphémère

Le !indique une commande de shell externe, donc $ man tr(par opposition à :help tr) révèle que trc'est pour translate.
Braden Best

Juste une autre façon::%0,$!tr [:upper:] [:lower:]
albertovar

2

J'ai eu un problème similaire et je voulais l'utiliser ":%s/old/new/g", mais j'ai fini par utiliser deux commandes:

:0
gu:$
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.