W vimie wiem, że możemy użyć ~
dużej litery dla pojedynczego znaku (jak wspomniano w tym pytaniu ), ale czy istnieje sposób, aby pierwsza litera każdego słowa w zaznaczeniu była wielką literą za pomocą vim?
Na przykład, jeśli chciałbym zmienić
hello world from stackoverflow
do
Hello World From Stackoverflow
Jak mam to zrobić w vimie?
Odpowiedzi:
Możesz użyć następującej zamiany:
s/\<./\u&/g
\<
dopasowuje początek słowa.
dopasowuje pierwszy znak słowa\u
nakazuje Vimowi wielkie litery w następnym znaku w łańcuchu podstawienia(&)
&
oznacza zastąpienie wszystkiego, co zostało dopasowane na LHSźródło
%s/\<./\u&/g
:help case
mówi:To turn one line into title caps, make every first letter of a word uppercase: > : s/\v<(.)(\w*)/\u\1\L\2/g
Wyjaśnienie:
: # Enter ex command line mode. space # The space after the colon means that there is no # address range i.e. line,line or % for entire # file. s/pattern/result/g # The overall search and replace command uses # forward slashes. The g means to apply the # change to every thing on the line. If there # g is missing, then change just the first match # is changed.
Część wzoru ma to znaczenie.
\v # Means to enter very magic mode. < # Find the beginning of a word boundary. (.) # The first () construct is a capture group. # Inside the () a single ., dot, means match any # character. (\w*) # The second () capture group contains \w*. This # means find one or more word caracters. \w* is # shorthand for [a-zA-Z0-9_].
Wynik lub część zastępcza ma to znaczenie:
\u # Means to uppercase the following character. \1 # Each () capture group is assigned a number # from 1 to 9. \1 or back slash one says use what # I captured in the first capture group. \L # Means to lowercase all the following characters. \2 # Use the second capture group
Wynik:
Alternatywa dla bardzo magicznego trybu:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g # Each capture group requires a backslash to enable their meta # character meaning i.e. "\(\)" verses "()".
źródło
Vim Tips Wiki ma mapowanie TwiddleCase, które przełącza wizualny wybór na małe litery, WIELKIE LITERY i WIELKIE LITERY .
Jeśli dodasz
TwiddleCase
funkcję do swojej.vimrc
, po prostu wizualnie wybierz żądany tekst i naciśnij znak tyldy,~
aby przełączać się między przypadkami.źródło
Wypróbuj to wyrażenie regularne ...
źródło
&
ale nie działa, jeśli twój ciąg znaków ma na początku różne litery lub wszystkie wielkie litery.Opcja 1. - To mapowanie mapuje klawisz
q
na wielką literę w pozycji kursora, a następnie przechodzi do początku następnego słowa:: map q gUlw
Aby tego użyć, umieść kursor na początku linii i naciśnij
q
raz dla każdego słowa, aby pierwsza litera była wielka. Jeśli chcesz zostawić pierwszą literę tak, jak jest, naciśnijw
zamiast tego, aby przejść do następnego słowa.Opcja 2. - To mapowanie mapuje klawisz,
q
aby odwrócić wielkość liter w pozycji kursora, a następnie przenosi się na początek następnego słowa::map q ~w
Aby tego użyć, umieść kursor na początku trafionej linii
q
raz dla każdego słowa, aby odwrócić wielkość liter pierwszej litery. Jeśli chcesz zostawić pierwszą literę tak, jak jest, naciśnijw
zamiast tego, aby przejść do następnego słowa.Usuń mapowanie. - Aby usunąć mapowanie (usunąć) przypisane do
q
klawisza::unmap q
źródło
qq~wq
i powtórz, a@q
następnie@@
?Jest do tego bardzo przydatna
vim-titlecase
wtyczka.źródło
Aby ograniczyć modyfikację do selekcji wizualnej, musimy użyć czegoś takiego:
:'<,'>s/\%V\<.\%V/\u&/g \%V ............... see help for this
źródło