Wzorzec edycji, z którym często się spotykam, jest następujący: Chcę przeciągnąć kawałek tekstu w cudzysłowie lub nawiasach i zastąpić ten fragment tekstu inną parą cudzysłowów / nawiasów.
Na przykład, jeśli chcę skopiować nazwę klasy foo bar
i wkleić ją gdzie indziej:
<span class="foo bar">
<div class="this-should-be-replaced-with-foo-and-bar">
Wiem to: jeśli poruszam się w klasie zakresu, używam yi"
do szarpania tekstu w cudzysłowie.
Teraz mam to w swoim rejestrze, więc powinienem być w stanie zastąpić nim zawartość klasy div. Ale nie mogę znaleźć przydatnego sposobu na zrobienie tego.
Jeśli użyję ciw
tego, nadpisuję mój rejestr treściami do zmiany, więc tracę szarpany tekst.
Najlepszą rzeczą, jaką mogę wymyślić, jest przejście do pierwszego cytatu z klasy div, uderzenie p
, a następnie usunięcie następnego cytatu za pomocą dt"
.
Zwykle jednak popsuję swoją pozycję i wklejam ją gdzieś w cudzysłowie, łącząc dwa ciągi i to psuje wszystko.
Mam nadzieję, że istnieje sposób, aby zrobić kombinację „zamień tekst wewnętrzny na moją szarpaną treść”, aby to ułatwić.
źródło
Możesz użyć rejestru numerowanego. Najpierw szarpnij „foo-bar”
yi"
, który wypełni"0
rejestr, patrz:h "0
. Następnie zrób,ci"<c-r>0
aby zastąpić zawartością rejestru 0.Zobacz
:h i_CTRL-R
opis ostatniej części.źródło
yi"
) i wklejać z rejestru, w0
którym jest on przechowywany po usunięciu tekstu do zmiany (ci"<c-r>0
)? Jeśli chodzi o vimgolf, wygrywasz 2 naciśnięcia klawiszy i nie zadzierasz z rejestrami.CTRL+r
wcześnieja
, to<c-r>
znaczy.ciw
umieszcza usunięty tekst w rejestrze bez nazwy, ale rejestry są przesuwane, dlatego<c-r>0
zamiast tego należy użyć<c-r>"
. Zobaczyć:h quote_number
."0
Rejestr jest wypełniona tylko przez polecenie wycinania i nie będzie przeszkadzał npc
.Oto inne rozwiązanie. Nie jest najlepszy pod względem Vimgolfa, ale używa rejestru czarnej dziury:
Gdy znajdziesz się na
foo bar
sznurku, możesz go normalnie szarpaćyi"
.Następnie w nawiasach, aby zmienić:
"_di"P
Który jest:
Zaletą rejestru czarnej dziury jest to, że nie zepsuje on innych rejestrów. Zobacz
:h quote_
po więcej szczegółów.(Pamiętaj, że ta odpowiedź jest tylko tutaj, aby porozmawiać o rejestrze zaciemnionym. Ja osobiście używam selekcji wizualnej, jak sugeruje @grodzik).
źródło
P
. Kiedy będzieszdi"
kursor pozostanie na ostatnich cytatach ip
wklei po, gdzie jakP
wklei przed bieżącą pozycją.Potrzebuję tego tak często, napisałem wtyczkę, aby uprościć i umożliwić maksymalną prędkość: ReplaceWithRegister .
Ta wtyczka oferuje polecenie dwa w jednym,
gr
które zastępuje tekst objęty obiektem {motion} / text, całą linię (linie) lub bieżące zaznaczenie zawartością rejestru; stary tekst jest usuwany do rejestru czarnej dziury, tzn. zniknął. Przejrzysto obsługuje wiele skrzynek narożnych i pozwala na szybkie powtórzenie za pomocą standardowego.
polecenia. Jeśli ci się to nie podoba, jego strona zawiera linki do alternatyw.źródło