Próbuję zrozumieć, w jaki sposób mogę używać operatora z kolejnym ruchem wewnątrz mapowania. Na przykład:
nmap /c c{here we pending for a motion}/<C-r>"<CR>
Mapa powinna wykonać następujące czynności:
- Aktywuj
c
operatora i nasłuchuj następnego ruchu; - Np. Mogę wpisać tutaj,
t,
aby zmienić wszystko przed następnym przecinkiem; - Przejdź do trybu wstawiania usuwając wszystko między kursorem a przecinkiem;
- Usunięty tekst jest automatycznie przeszukiwany jako wzór
Mówiąc najprościej, po usunięciu tekstu ruchomego pozostaję w trybie wstawiania z wyróżnionymi wystąpieniami usuniętego tekstu. Byłbym bardzo wdzięczny, gdyby ktoś pomógł mi rozwiązać tę sprawę.
AKTUALIZACJA
Odpowiedzi są prawie to, czego chcę. Ale! Kiedy naciskam /cw
, wpisz coś zamiast słowa, a następnie naciśnij <Esc>
. Po spodziewam się zrobić to samo z następnymi wystąpieniami. Ale po naciśnięciu n
(przejdź do następnego wystąpienia) i .
(powtórz ostatnie polecenie) po prostu wstawia ostatni wpisany tekst zamiast go zastępować. Głównym celem mapowania jest używanie go n/N
i .
powtarzanie. Czy coś przeoczyłem?
źródło
/c
ii
) vim po.
prostu powtarza ostatni. Jeśli chcesz go rozszerzyć, sprawdźrepeat
wtyczkę. @TimurFayzrakhmanov również istnieją:g
i:s
polecenia, mogą ci również pomóc."
w twoim kodzie jest coś dziwnego'let @/=@""'
? Myślałem, że jest to możliwe, na przykładsilent exec 'normal!
[v]c'
, ponieważc
operator robi to, czego oczekuję, z wyjątkiem tego, że nie dodaje zmienionego tekstu do wzorca wyszukiwania.""
była literówka .. poprawka .. Ja też wymyśliłemc
, ale dodałem spację, ponieważ jest zmiana trybun-i-n-i
, myślę ... zrób jakiś test, który zobaczysz.d
sięy
istartinsert
docall feedkeys("cgn", 'n')
(zobacz moją odpowiedź poniżej)Łatwiej jest wdrożyć (i udokumentować) złożone mapowania za pomocą funkcji:
Następnie wywołaj funkcję mapowania:
Edytować:
Jeśli zamiarem jest, aby wykonać wyszukiwanie i zamienianie w wielu miejscach należy spróbować polecenie zamiany:
:s
. Możesz zmienić mapowanie, aby skopiować zaznaczenie wizualne do wzorca wyszukiwania:źródło
enter motion:
, dał:t,ggVGJZZ
^ _ ^ Jest to powszechny problem łączenia poleceń/cw
a następnie wpisuję coś zamiast słowa, a następnie naciśnij<Esc>
. Po tym chcę zrobić to samo z następnymi wystąpieniami. Ale po naciśnięciun
(przejdź do następnego wystąpienia) i.
(powtórz ostatnie polecenie) po prostu wstawia ostatni wpisany tekst zamiast go zastępować. Głównym celem mapowania jest używanie gon/N
i.
powtarzanie. Czy coś przeoczyłem?.
powtórzyć polecenie.<CR>
odinput()
).To rozwiązanie działa z „powtarzaniem ostatniego polecenia” (alias
.
):Podczas powtarzania nie musisz nawet używać
n
, możesz po prostu użyć.
bezpośredniego pobierania i zamiany następnego wystąpienia, jeśli chcesz iść szybciej.Ewentualnie, jeśli chcesz mieć w highlights pasujące słowy, można zastąpić
'cgn'
przez'n``cgn'
.źródło