One Liner
Znalazłem prostą zamianę wyrażeń regularnych (zakładając, że ustawiono „magię”):
:s/ \([a-zA-Z]\)/\u\1/g
Dopasowuje każdą pojedynczą literę po spacji, oszczędzając literę. Następnie zastępuje go zapisaną wielką literą ( \u
= wielkie litery, \1
= pierwsze zapisane dopasowanie) dla każdego dopasowania w linii.
Zastosuj do całego pliku, wstawiając %
pomiędzy :
i s
.
Wadą tego rozwiązania jest to, że jest ono liniowe (co działa w przypadku twoich przykładów), ale byłoby nieskuteczne, gdybyś chciał tylko wyodrębnić kilka słów z wielu w linii.
Pełniejsze rozwiązanie
map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
let searchsave=@/
silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
let @/=searchsave
endfunction
Tworzy to nowego operatora, który może operować ruchem. Jeśli <leader>
tak \
, to podaj następujący tekst (z |
kursorem):
This is some |example text to work with.
Pisanie \g~3w
daje
This is some exampleTextTo work with.
Oznacza to, że wielbłąd składa się z 3 słów.
Opis tego zastąpienia:
s/
rozpoczyna podstawienie.
\%>'\[
jest trochę bolesne. \%>'m
Mówi, aby dopasować się do prawa do znaku. Chcemy znaku [
, ale to również musi być wymykane w tym wzorze. To zaczyna mecz po ruchu podanym operatorowi.
\([a-zA-Z\)
jest taki sam jak w powyższej linijce.
\%<']
to jest drugi koniec, pasujący przed końcem ruchu.
/\u\1/g
jest zamiennikiem z powyższej liniówki.
Alternatywnie używam wtyczki vim-abolish, która oferuje funkcję przymusu:
źródło
Możesz utworzyć makro rekurencyjne, które robi to dla pojedynczej linii, za pomocą następujących naciśnięć klawiszy:
(Zauważ, że spacja między
f
ix
to stuknięcie spacji, a nie pauza)Szczegółowo:
Wyczyść rejestr q. Jest to konieczne, ponieważ tworzymy makro rekurencyjne. (Patrz krok 5.):
qqq
Rozpocznij rejestrowanie makra w rejestrze q:
qq
Nie możesz
w
tutaj użyć ruchu, ponieważ chcesz, aby makro przerywało, gdy dotrze do końca linii, zamiast przeskakiwać do następnej linii. Zamiast tego przejdź do następnego znaku spacji w wierszu, naciskającf
klawisz, a następnie spację:f<space>
Usuń spację i wielkie litery następującą literę:
xgUl
Powtórz. Ponieważ wyczyściliśmy
q
rejestr w kroku 1, nie ma w nim jeszcze nic, więc nic to nie da:@q
Zapisz makro:
q
Następnie możesz zastosować to makro do wielu linii, używając zakresu:
Zastosuj makro do każdej linii w pliku:
Zastosuj makro do linii 2–5 włącznie:
Dokonaj wizualnego wyboru, a następnie wpisz
:normal @q
. Spowoduje to wstępne wypełnienie wiersza polecenia po naciśnięciu:
klawisza, w wyniku czego polecenie zastosuje makro do każdej linii w zaznaczeniu:źródło
q
rejestruqq
nie jest konieczne , podobnie jak przed rozpoczęciem rejestrowania naciśnięć klawiszy. W rzeczywistości właśnie dlategoqqq
działa wyczyszczenieq
rejestru :)q
rejestru (tj. Za pomocąqQ
), najpierw wyczyszczenie go prawdopodobnie będzie konieczne.vim -u NONE
). Istniejąca zawartość jest usuwana dopiero po zapisaniu rejestru, w kroku 6. Czyszczenie rejestru przed rozpoczęciem jest zatem konieczne, jeśli chcesz się powtórzyć.Zobacz http://vim.wikia.com/wiki/Changing_case_with_regular_expressions Wyjaśnia modyfikatory \ U, \ L, \ u, \ l dość jasno i zwięźle!
Jego istotą jest:
Są chwile, w których możesz chcieć przejrzeć plik i zmienić wielkość znaków spełniających dowolne kryteria. Jeśli dobrze rozumiesz wyrażenia regularne, możesz to zrobić dość łatwo.
Jest to tak proste, jak umieszczenie \ U lub \ L przed odniesieniami wstecznymi, dla których chcesz zmienić wielkość liter, i \ E na końcu. Vim sprawi, że tekst w odnośnikach wstecznych będzie pisany odpowiednio dużymi lub małymi literami. Użyj \ u i \ l (bez \ E na końcu), aby zmienić wielkość liter pierwszego znaku w odnośniku wstecznym.
(„Odwołanie wsteczne” jest częścią wyrażenia regularnego, które odnosi się do poprzedniej części wyrażenia regularnego. Najczęstsze odniesienia wsteczne to &, \ 1, \ 2, \ 3, ..., \ 9).
Kilka przykładów, które pokazują moc tej techniki:
Małe litery całego pliku
(& jest przydatnym odsyłaczem wstecznym, który odnosi się do pełnego tekstu dopasowania).
Wielkie litery wszystkich słów poprzedzonych znakiem <(tzn. Otwierającymi nazwy znaczników HTML):
Zwróć także uwagę na polecenia gu i gU.
Na przykład ggguG zmniejszy cały plik do małych liter. (gg = przejdź na górę, gu = małe litery, G = przejdź do EOF).
Używając ogólnego odnośnika zwrotnego \ 0 zamiast nazwanych (\ 1, \ 2 itd.), Możesz zaoszczędzić trochę na pisaniu przy zwrotce zwrotnej wyrażenia regularnego.
Wyrażenie regularne wielkie litery jawny zestaw słów na wielkie litery w pliku:
Nie nauka o rakietach, ale w innym przypadku musiałbyś to zrobić:
źródło