2013-07-03 9 views

Odpowiedz

103

można wykorzystywać następujące zmiany:

s/\<./\u&/g 
  • \< dopasowuje początek wyrazu
  • . mecze pierwszą literę słowa
  • \u mówi Vima na wielkie następującą postać w ciąg zastępujący (&)
  • & oznacza substytut została dopasowana na LHS
+2

Dziękuję bardzo, szczególnie za wyjaśnienie każdego szczegółu! – keelar

+0

@keelar. Nie ma za co :) –

+0

Po prostu musiałem to zrobić i użyłem makro, które powtórzyłem i wiedziałem, że musi być jakiś lepszy sposób, ale nigdy nie korzystałem z regex. To jest świetne. Dzięki. –

24

: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 

Objaś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ęść wzór ma to znaczenia.

\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_]. 

Rezultatem 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:

ROPER STATE PARK 
Roper State Park 

Alternatywną do trybu bardzo Magic:

: % s/\<\(.\)\(\w*\)/\u\1\L\2/g 
    # Each capture group requires a backslash to enable their meta 
    # character meaning i.e. "\(\)" verses "()". 
+2

To była najciekawsza odpowiedź dla mnie. Nigdy nie widziałem trybu magicznego. Myślałem, że udokumentuję odpowiedź po tym, jak zrozumiem odpowiedź. – Greg

+0

Dodatkowo ta odpowiedź obsługuje wszystkie małe litery, wielkie litery lub kombinowane ciągi znaków. – Greg

9

VIM Porady Wiki ma numer TwiddleCase mapping, który przełącza wybór wizualny na małe litery, WIELKĄ PRZYPADKĘ i Tytułu.

Jeśli dodasz funkcję TwiddleCase do swojej .vimrc, to po prostu wybierz wizualnie żądany tekst i naciśnij znak tyldy ~, aby przeglądać poszczególne przypadki.

2

Try To regex ..

s/ \w/ \u&/g 
+0

Podobała mi się odpowiedź z użyciem '&', ale nie działa, jeśli twój ciąg znaków jest od początku mieszany lub zaczyna się całe wielkie. – Greg

1

Jest też bardzo przydatna vim-titlecase plugin do tego.

+0

Dzięki. Smart Title Case sprawdza się również w przypadku Sublime Text. https://github.com/mattstevens/sublime-titlecase –

Powiązane problemy