Como converter todo o texto em minúsculas no Vim

211

Como você converte todo o texto no Vim para minúsculo? Isso é possível?

ksuralta
fonte
Temos muitas páginas html com todos os caracteres em maiúsculas. Isso me poupa tempo re-digitando tudo em letras minúsculas.
ksuralta
2
Antes da edição da pergunta, era como converter todo o texto no vim em versalete. Obviamente, há um caso de uso para converter texto em minúsculas.
lemonad
6
O site do VIM tem a resposta: vim.wikia.com/wiki/Switching_case_of_characters Obrigado.
Fnds 9/11/12

Respostas:

122
  1. Se você realmente quer dizer letras maiúsculas , então não, isso não é possível - assim como não é possível converter texto em negrito ou itálico em qualquer editor de texto (em oposição ao processador de texto ). Se você deseja converter texto em minúsculas, crie um bloco visual e pressione u(ou Upara converter em maiúsculas). Tilde ( ~) no modo de comando inverte as maiúsculas e minúsculas do caractere sob o cursor.

  2. Se você quiser ver todo o texto no Vim em letras maiúsculas, consulte a guifontopção ou digite :set guifont=*se o seu sabor do Vim suporta o seletor de fontes da GUI.

zoul
fonte
33
Acho que vale a pena mencionar que você não precisa necessariamente criar um bloco visual para minúsculas um bloco de texto. guuminúscula uma linha e gu[motion]minúscula o valor desse movimento. Da mesma forma, gUUe gU[motion]funciona da mesma maneira, apenas para maiúsculas.
Zachary Murray
1
Na verdade, as maiúsculas também são possíveis para a maioria das letras, usando ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz.
Gerrit
1
Isso é apenas um truque, no entanto. Elas não devem ser usadas como letras maiúsculas regulares e não são bem suportadas por fontes. (Na minha máquina desktop, o F é renderizado de forma estranha, no meu telefone não é renderizado, para dar um exemplo.) De qualquer forma, parte interessante do Unicode, obrigado!
zoul 21/08/2015
2
Esta resposta está incorreta. user80168 tem a resposta correta.
Wayne Workman
400

Suponho que você queira o texto em minúsculas. A solução é bem simples:

ggVGu

Explicação:

  1. gg - vai para a primeira linha do texto
  2. V - ativa a seleção visual, no modo de linha
  3. G - vai para o final do arquivo (no momento em que você selecionou o texto inteiro)
  4. u - área selecionada em minúsculas
Dave Jarvis
fonte
88
ou ggguG se você quiser fazê-lo sem seleção visual. : help gu
DrAl
18
capital de uso Ude maiúsculas (por exemplo ggVGU)
Nathan Wallace
42

Semelhante à solução de mangledorf, mas mais curta e fácil para leigos

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

Tarkeshwar
fonte
3
:%s/.*/\L&seria suficiente (não precisa da gbandeira, pois .*seleciona a linha inteira)
Gordon Gustafson 28/09
1
Como seria :%s/./\L&/g, uma vez que / g / denota uma operação que é global para a linha. O que me deixa, no entanto, é o &. Por que isso é necessário?
Braden Best
1
&significa aqui what was matched by the pattern, para que possa ser entendido da seguinte forma: substituir .*por \Lowercase(what was matched by the pattern). Note-se que combinando em .nível mundial é mais lenta do que a correspondência.*
Camusensei
39

use esta opção de modo de 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.
Kalanidhi
fonte
27

Muitas maneiras de esfolar um gato ... aqui está o que eu acabei de postar sobre:


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

Da mesma forma para maiúsculas:


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

Eu prefiro assim porque estou usando esse construct ( :%s/[pattern]/replace/g) o tempo todo, então é mais natural.

Alec Jacobson
fonte
Eu acho que existe um erro de digitação no último exemplo ('da mesma forma para maiúsculas') - o regex deve mudar para [az] em vez de '[AZ]'.
monojohnny
1
:%s/./\U&/gtambém funciona. Acontece que ele ignora números e caracteres que não são do alfabeto. O que me pega é o &. Por que \ U (ou \ L) por si só não é suficiente? Podemos obter uma explicação para isso?
Braden Best
2
&é um substituto para a sequência correspondente. Coloca em \U&maiúscula a sequência correspondente para que possa ser usada para a substituição.
Alec Jacobson
22
  • Alterne maiúsculas e minúsculas "HellO" para "hELLo" com g ~ e um movimento.
  • Maiúsculas "HellO" para "OLÁ!" Com gU e depois um movimento.
  • Minúsculas "HellO" para "olá" com gu, em seguida, um movimento.

Para exemplos e mais informações, leia isto: http://vim.wikia.com/wiki/Switching_case_of_characters

Adolfo Abegg
fonte
Acho que não há, mas há um comando de substituição menos que intuitivo na resposta do @mangledorf, substituindo os caracteres desejados pela sequência de escape "\ L &" para minúsculas e "\ U &" para maiúsculas. O que me pega é o &. \ L e \ U fazem todo o sentido, mas por que é &necessário?
Braden Best
9

usar ggguG

gg: vai para a primeira linha. gu: mude para minúsculas. G: vai para a última linha.

Ziyadsk
fonte
Como isso difere da resposta de Kalanidhi?
precisa saber é o seguinte
Promovido o voto para trazer para 0, que é uma pontuação adequada para uma resposta que é uma cópia da anterior. @MSeifert pontuação negativa deve ser reservada para soluções erradas / prejudiciais
Titou
7

Normalmente Vu(ou VUem maiúsculas) é suficiente para transformar a linha inteira em minúscula, pois Vjá seleciona a linha inteira para aplicar a ação.

Tilda ( ~) altera o caso da letra individual , resultando em caso de camelo ou similar.

É realmente ótimo como o Vim tem muitos modos diferentes para lidar com várias ocasiões e como esses modos são organizados de maneira organizada.

Por exemplo, v- o modo visual verdadeiro e os modos de Vlinha visual relacionada e Ctrl+ Q- bloco visual (o que permite selecionar blocos, um ótimo recurso que alguns outros editores avançados também oferecem geralmente, mantendo pressionada a Alttecla e selecionando o texto).


fonte
6

Se você estiver rodando sob o sabor do Unix

:0,$!tr "[A-Z]" "[a-z]"
ojblass
fonte
4
Os colchetes são supérfluos e, depois de removidos, as aspas também não são necessárias. :%!tr A-Z a-z
ephemient
O !indica um comando de shell externo, então $ man tr(ao contrário de :help tr) revela que tré para translate.
Braden Best
Apenas outra maneira::%0,$!tr [:upper:] [:lower:]
albertovar
2

Eu tive um problema semelhante e queria usar ":%s/old/new/g", mas acabei usando dois comandos:

:0
gu:$
shaolinux
fonte