Come convertire tutto il testo in minuscolo in Vim


211

Come si converte tutto il testo in Vim in minuscolo? È anche possibile?


Abbiamo molte pagine html con tutti i caratteri in maiuscolo. Questo mi fa risparmiare tempo a riscrivere tutto in minuscolo.
ksuralta,

2
Prima che la domanda fosse modificata, era come convertire tutto il testo in Vim in maiuscoletto. Ovviamente, c'è un caso d'uso per convertire il testo in minuscolo.
lemonad,

6
Il sito web di VIM ha la risposta: vim.wikia.com/wiki/Switching_case_of_characters Grazie.
FNDS

Risposte:


122
  1. Se intendi davvero maiuscoletto , allora no, questo non è possibile - proprio come non è possibile convertire il testo in grassetto o corsivo in qualsiasi editor di testo (al contrario dell'elaboratore di testi ). Se vuoi convertire il testo in minuscolo, crea un blocco visivo e premi u(o Uper convertire in maiuscolo). Tilde ( ~) in modalità comando inverte il caso del carattere sotto il cursore.

  2. Se vuoi vedere tutto il testo in Vim in maiuscolo, potresti voler guardare l' guifontopzione, o digitare :set guifont=*se il tuo sapore Vim supporta il selettore di caratteri della GUI.


33
Penso che valga la pena ricordare che non è necessario creare un blocco visivo per minuscole un blocco di testo. guuminuscola una linea e gu[motion]minuscola il testo di quel movimento. Allo stesso modo, gUUe gU[motion]funziona allo stesso modo, solo in maiuscolo.
Zachary Murray,

1
In realtà, i caratteri minuscoli sono anche possibili per la maggior parte delle lettere, usando ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz.
Gerrit,

1
Questo è solo un trucco, però. Questi non sono pensati per essere usati come normali maiuscoletti e non sono ben supportati dai caratteri. (Sulla mia macchina desktop, la F esegue il rendering in modo strano, sul mio telefono non lo rende affatto, per fare un esempio.) Comunque, parte interessante di Unicode, grazie!
zoul

2
Questa risposta non è corretta user80168 ha la risposta corretta.
Wayne Workman,

401

Presumo che tu voglia il testo in minuscolo. La soluzione è piuttosto semplice:

ggVGu

Spiegazione:

  1. gg - passa alla prima riga di testo
  2. V - attiva la selezione visiva, in modalità linea
  3. G - va alla fine del file (al momento hai selezionato tutto il testo)
  4. u - area selezionata minuscola

88
o ggguG se vuoi farlo senza selezione visiva. : help gu
DrAl

18
usa Umaiuscolo per maiuscolo (es. ggVGU)
Nathan Wallace,

42

Simile alla soluzione di Mangledorf, ma più breve e amichevole per i non addetti ai lavori

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


3
:%s/.*/\L&basterebbe (non serve la gbandiera poiché .*seleziona l'intera linea)
Gordon Gustafson

1
Come farebbe :%s/./\L&/g, poiché / g / indica un'operazione globale per la linea. Quello che mi prende, però, è il &. Perché è necessario?
Braden Best

1
&sta qui per what was matched by the pattern, quindi può essere compreso come segue: sostituire .*con \Lowercase(what was matched by the pattern). Nota che la corrispondenza a .livello globale è più lenta della corrispondenza.*
Camusensei,

39

utilizzare questa opzione della modalità di comando

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

Molti modi per scuoiare un gatto ... ecco il modo in cui ho appena pubblicato :


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

Allo stesso modo per le maiuscole:


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

Preferisco così perché sto usando questo costrutto ( :%s/[pattern]/replace/g) continuamente, quindi è più naturale.


Penso che ci sia un errore di battitura nell'ultimo esempio ('allo stesso modo per le maiuscole') - la regex dovrebbe cambiare in [az] anziché in [[AZ] '').
monojohnny,

1
:%s/./\U&/gfunziona anche. Si scopre che ignora numeri e caratteri non alfabetici. Quello che mi prende è il &. Perché \ U (o \ L) da solo non basta? Possiamo avere una spiegazione per questo?
Braden Best

2
&è uno stand-in per la stringa corrispondente. In questo modo viene \U&capitalizzata la stringa corrispondente in modo che possa essere utilizzata per la sostituzione.
Alec Jacobson,

22
  • Attiva "HellO" su "hELLo" con g ~ quindi un movimento.
  • "HellO" maiuscolo in "Hello" con gU quindi un movimento.
  • "HellO" minuscolo per "ciao" con gu poi un movimento.

Per esempi e maggiori informazioni, leggi questo: http://vim.wikia.com/wiki/Switching_case_of_characters


Suppongo che non lo sia, ma c'è un comando di sostituzione poco intuitivo per quello nella risposta di @mangledorf sostituendo i caratteri desiderati con la sequenza di escape "\ L &" per lettere minuscole e "\ U &" per lettere maiuscole. Quello che mi prende è il &. \ L e \ U hanno perfettamente senso, ma perché è &necessario?
Braden Best

9

uso ggguG

gg: passa alla prima riga. gu: cambia in minuscolo. G: passa all'ultima riga.


In cosa differisce dalla risposta di Kalanidhi?
MSeifert,

Eseguito l'upgrade per portare questo a 0, che è un punteggio adeguato per una risposta che è una copia di una precedente. @MSeifert I punteggi negativi devono essere riservati a soluzioni errate / dannose
Titou

7

Di solito Vu(o VUmaiuscolo) è sufficiente trasformare l'intera linea in minuscolo comeV già seleziona l'intera linea per applicare l'azione.

Tilda ( ~) cambia il caso della singola lettera , con conseguente caso di cammello o simile.

È davvero fantastico come Vim abbia molte modalità diverse per gestire le varie occasioni e come queste modalità siano organizzate in modo ordinato.

Ad esempio, v- la vera modalità visiva e le relative V- linea visiva e Ctrl+ Q- modalità di blocco visivo (ciò che consente di selezionare i blocchi, una grande funzionalità offerta da altri editor avanzati di solito tenendo premuto il Alttasto e selezionando il testo).


6

Se corri con un sapore Unix

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

4
Le parentesi quadre sono superflue e, una volta rimosse, anche le virgolette non sono necessarie. :%!tr A-Z a-z
effimero

Il !indica un comando esterno di shell, quindi $ man tr(a differenza :help tr) rivela che trè per translate.
Braden Best

Solo un altro modo::%0,$!tr [:upper:] [:lower:]
albertovar

2

Avevo un problema simile e volevo usarlo ":%s/old/new/g", ma alla fine ho usato due comandi:

:0
gu:$
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.