Jak przekonwertować cały tekst na małe litery w Vimie

211

Jak przekonwertować cały tekst w Vimie na małe litery? Czy to w ogóle możliwe?

ksuralta
źródło
Mamy wiele stron HTML ze wszystkimi znakami pisanymi wielkimi literami. To oszczędza mi czasu na pisanie wszystkiego małymi literami.
ksuralta
2
Przed edycją pytania było to, jak przekonwertować cały tekst w vimie na małe litery. Oczywiście istnieje przypadek użycia do konwersji tekstu na małe litery.
lemonad
6
Witryna VIM ma odpowiedź: vim.wikia.com/wiki/Switching_case_of_characters Dzięki.
fnds

Odpowiedzi:

122
  1. Jeśli naprawdę masz na myśli małe litery , to nie, nie jest to możliwe - podobnie jak nie można przekonwertować tekstu na pogrubiony lub kursywą w dowolnym edytorze tekstu (w przeciwieństwie do edytora tekstu ). Jeśli chcesz przekonwertować tekst na małe litery, utwórz blok wizualny i naciśnij u(lub, Uaby przekonwertować na wielkie litery). Tilde ( ~) w trybie komend odwraca wielkość znaków pod kursorem.

  2. Jeśli chcesz zobaczyć cały tekst w Vimie małymi literami, możesz zajrzeć do guifontopcji lub wpisać, :set guifont=*czy twój smak Vima obsługuje wybór czcionek GUI.

zoul
źródło
33
Myślę, że warto wspomnieć, że niekoniecznie trzeba tworzyć blok wizualny, aby blok tekstu był pisany małymi literami. guuzmniejszy literę i gu[motion]zmniejszy wartość tekstu tego ruchu. Podobnie gUUi gU[motion]działają w ten sam sposób, tylko dla wielkich liter.
Zachary Murray,
1
W rzeczywistości małe litery są również możliwe dla większości liter, używając ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz.
gerrit
1
To tylko hack. Nie są one przeznaczone do użycia jako zwykłe małe litery i nie są dobrze obsługiwane przez czcionki. (Na moim komputerze stacjonarnym F renderuje dziwnie, na moim telefonie wcale nie renderuje, żeby dać przykład.) W każdym razie, interesująca część Unicode, dzięki!
zoul,
2
Ta odpowiedź jest niepoprawna. user80168 ma poprawną odpowiedź.
Wayne Workman
400

Zakładam, że chcesz mały tekst. Rozwiązanie jest dość proste:

ggVGu

Wyjaśnienie:

  1. gg - przechodzi do pierwszego wiersza tekstu
  2. V - włącza selekcję wzrokową w trybie liniowym
  3. G - przechodzi na koniec pliku (w tej chwili masz zaznaczony cały tekst)
  4. u - zaznaczony obszar małymi literami
Dave Jarvis
źródło
88
lub ggguG, jeśli chcesz to zrobić bez wizualnej selekcji. : pomoc gu
DrAl
18
użyj kapitału Una wielkie litery (np. ggVGU)
Nathan Wallace
42

Podobne do rozwiązania mangledorfa, ale niższe i przyjazne dla laika

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

tarkeshwar
źródło
3
:%s/.*/\L&wystarczyłoby (nie potrzebuję gflagi, ponieważ .*zaznacza całą linię)
Gordon Gustafson
1
Tak jak by to było :%s/./\L&/g, ponieważ / g / oznacza operację globalną dla linii. Tym, co mnie jednak przyciąga, jest &. Dlaczego to konieczne?
Braden Best
1
&oznacza tutaj what was matched by the pattern, więc można to rozumieć w następujący sposób: zastąp .*przez \Lowercase(what was matched by the pattern). Pamiętaj, że .globalne dopasowanie jest wolniejsze niż dopasowanie.*
Camusensei
39

użyj tej opcji trybu poleceń

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
źródło
27

Wiele sposobów na skórę kota ... oto sposób po prostu pisał o:


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

Podobnie w przypadku wielkich liter:


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

Wolę tak, ponieważ :%s/[pattern]/replace/gcały czas używam tej konstrukcji ( ), więc jest to bardziej naturalne.

Alec Jacobson
źródło
Myślę, że w ostatnim przykładzie jest literówka („podobnie jak wielkie litery”) - regex powinien zmienić się na [az] zamiast „[AZ]”.
monojohnny
1
:%s/./\U&/gdziała również. Okazuje się, że ignoruje cyfry i znaki inne niż alfabet. To, co mnie przyciąga, to &. Dlaczego sam \ U (lub \ L) nie wystarczy? Czy możemy uzyskać wyjaśnienie?
Braden Best
2
&jest stand-in dla dopasowanego ciągu. Dlatego \U&wielką literę dopasowuje tak, aby można go było użyć do zamiany.
Alec Jacobson
22
  • Przełącz wielkość liter „HellO” na „HELLo” za pomocą g ~, a następnie ruchu.
  • Wielkie litery „HellO” do „HELLO” z gU, a następnie ruch.
  • Małe litery „HellO” na „hello” z gu, a następnie ruchem.

Aby uzyskać przykłady i więcej informacji, przeczytaj to: http://vim.wikia.com/wiki/Switching_case_of_characters

Adolfo Abegg
źródło
Wydaje mi się, że nie ma, ale w odpowiedzi @mangledorf istnieje mniej niż intuicyjna komenda zastępowania, zastępując pożądane znaki sekwencją specjalną „\ L &” dla małych liter i „\ U &” dla wielkich liter. To, co mnie przyciąga, to &. \ L i \ U mają sens, ale dlaczego jest to &konieczne?
Braden Best
9

posługiwać się ggguG

gg: przechodzi do pierwszej linii. gu: zmień na małe litery. G: przechodzi do ostatniej linii.

Ziyadsk
źródło
Czym różni się to od odpowiedzi Kalanidhi?
MSeifert
Zaakceptowano podniesienie tej wartości do 0, co stanowi odpowiedni wynik dla odpowiedzi, która jest kopią poprzedniej. @MSeifert Negatywne wyniki powinny być zarezerwowane dla złych / szkodliwych rozwiązań
Titou
7

Zwykle Vu(lub VUwielkie litery) wystarczy, aby całą linię zamieniać na małe litery jakoV już zaznacza całą linię, aby zastosować akcję.

Tilda ( ~) zmienia wielkość liter pojedynczej litery , powodując wielbłąda lub podobną.

To naprawdę wspaniałe, jak Vim ma wiele różnych trybów radzenia sobie z różnymi okazjami i jak te tryby są uporządkowane.

Na przykład v- prawdziwy tryb wizualny i powiązane V- wizualna linia i Ctrl+ Q- wizualne tryby blokowania (co pozwala wybierać bloki, świetna funkcja, którą oferują inni zaawansowani edytorzy, zwykle przytrzymując Altklawisz i zaznaczając tekst).


źródło
6

Jeśli korzystasz ze smaku Uniksa

:0,$!tr "[A-Z]" "[a-z]"
ojblass
źródło
4
Nawiasy kwadratowe są zbędne, a po ich usunięciu cytaty również nie są konieczne. :%!tr A-Z a-z
ephemient
!Oznacza zewnętrzną powłokę, tak $ man tr(w przeciwieństwie do :help tr) ujawnia, że trjest translate.
Braden Best
Po prostu inaczej::%0,$!tr [:upper:] [:lower:]
albertovar
2

Miałem podobny problem i chciałem go użyć ":%s/old/new/g", ale ostatecznie użyłem dwóch poleceń:

:0
gu:$
shaolinux
źródło