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?


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.


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

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


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.

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.


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


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.


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).


6

Jeśli korzystasz ze smaku Uniksa

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

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:$
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.