W Vimie, jak usunąć ostatnie słowo i zastąpić innym z mapą?

0

Jest to rodzaj pisania, które często robię:

Kiedy jestem wszędzie na słowie, lubię je kopiować, więc mam prosty

:nmap <Leader>y yiw

A potem przechodzę do innego słowa (wszędzie na nim), aby zastąpić słowem szarpanym, więc piszę

:nnoremap cp "_diwP

(cp dla wyczyść i wklej)

przykład:

poprzednie szarpane słowo: „cześć”

Działa idealnie, jeśli wykonam cp na „pasku” (zamień na poprzednie szarpane)

lorem ipsum bar foo
> lorem ipsum hello foo

ale gdy słowo znajduje się na końcu wiersza (np. z „foo”), daje

lorem ipsum bar foo
> lorem ipsum barhello

Więc mam

:nnoremap cP "_diwp

Pytanie brzmi, jak „scalić”

:nnoremap cp "_diwP
:nnoremap cP "_diwp

na jednej mapie?

Dziękuje Ci za pomoc.

Hettomei
źródło

Odpowiedzi:

0

Możesz użyć ciwzamiast, diwa następnie wkleić w trybie wstawiania:

:nnoremap cp "_ciw<C-r>"<Esc>

Lub zawsze używaj, Pale usuwaj tylko oryginalne słowo:

:nnoremap cp "_yiwPl"_de

"_yiwjest przejście do początku oryginalnego słowa ( bkończy się niepowodzeniem, jeśli kursor znajduje się już na pierwszym znaku tego słowa, a obejścia takie jak lbrównież mają pułapki, chyba że :set ve+=onemore).

Nikita Kouevda
źródło
Przyjąłem: nnoremap cp „_yiwPl” _de Bardzo dziękuję, uwielbiam twoją sztuczkę z „_yiw i nie wiem <<de>> (ale to logika)
Hettomei
dejest podobny, dwale nie usuwa białych znaków przed następnym słowem.
Nikita Kouevda
1

Moja wtyczka ReplaceWithRegister zapewnia grmapowanie podobne do twojego, które obsługuje specjalne przypadki takie jak twoje.

Ponadto możesz być zainteresowany wtyczką Smartput ; zmienia polecenia p/ P, aby automatycznie dostosowywać spacje, przecinki itp. Za jego pomocą możesz również osiągnąć swój cel (chociaż będziesz musiał go użyć :nmap, :nnoremapaby nie włączyć wtyczki w swoich mapowaniach).

Ingo Karkat
źródło