Jak zamienić słowo na szarpane słowo w trybie normalnym

25

Kiedy muszę zastąpić słowo innym słowem, które szarpię, zwykle używam przepływu pracy, który wydaje mi się nienaturalny:

Powiedzmy, że mam ten tekst:

foo bar buzz

I chcę szarpać fooi zastąpić barto, co szarpnąłem wcześniej.

Po pociągnięciu foowidzę następujące opcje:

opcja 1

  1. Ustaw kursor za barpomocąw

  2. Umieścić fooz przodu barzP

  3. Umieść kursor na bpozostałych bari usuń słowo za pomocąde

Opcja 2

  1. Umieść kursor na pasku za pomocą w

  2. Użyj, deaby usunąćbar

  3. Umieść zawartość rejestru 0 za pomocą "0P(ponieważ skasowałem bar, foonie jest już dostępny za pomocą prostego p)

Oba sposoby wydają mi się zbyt skomplikowane i jestem pewien, że istnieje bardziej skuteczny sposób na osiągnięcie tego działania, ale nie mogę znaleźć sposobu. Pomysł ten polegałby na połączeniu operacji usuwania i wstawiania w jednym lub przynajmniej unikaniu trzymania usuniętego słowa w rejestrze yank, tak że mogę wstawić pożądane słowo za pomocą prostego p.

Wiem też, że tryb zastępowania został uruchomiony, Rale nie pozwala na umieszczenie tego, co zostało zerwane.

TL; DR : Jak zamienić słowo z treścią rejestru Yank?

statox
źródło

Odpowiedzi:

31

Zakładając, że masz już wyciągnął fooz yelub coś podobnego, a kursor znajduje się gdzieś na foo, można użyć Wvep:

  • Wprzejść do bar(jest to oczywiście opcjonalne i zależy od aktualnej pozycji kursora);
  • v uruchomić tryb wizualny;
  • eaby przejść do końca słowa (możesz tutaj również użyć innych ruchów, takich jak iw);
  • pwkleić foo; zastąpi to obecny wybór wizualny (który jest umieszczony w nienazwanym rejestrze "").
Martin Tournoij
źródło
2
Mogą Cię zainteresować następujące odcinki vimcast : Wklejanie z trybu wizualnego i Zamiana dwóch regionów tekstu za pomocą exchange.vim
Peter Rincker
6

Znalazłem inny sposób, aby to zrobić, jest trochę podobny do opcji 2, ale ma tę zaletę, że nie psuje stanu rejestrów.

Chodzi o to, aby użyć „ rejestru czarnej dziury ”: rejestr ten jest dostępny za pośrednictwem "_i ma tę szczególną cechę, że można do niego pisać, ale nie można z niego czytać, więc podobnie jak czarna dziura rejestr ten całkowicie usuwa wszystko, co się w nim znajduje. Tutaj możemy go użyć, więc foopozostaje w rejestrze Yank nawet po barusunięciu.

Dzięki temu rozwiązaniu przepływ po szarpnięciu foobyłby:

  • Zamiar barz W(lub dowolny potrzebne słowo oczywiście)
  • Użycie „rejestru czarnej dziury” do usunięcia za barpomocą"_de
  • Wprowadzanie fooz rejestru szarpnięć za pomocą P. Rejestr szarpnięć wciąż zawiera, fooodkąd barwszedł do czarnej dziury.

Nie jestem pewien, czy jest to lepsze rozwiązanie niż w przypadku @ Carpersmokera ( W przypadku vimgolfa @Carpetsmoker wygrywa ), ale nie wiedziałem o rejestrze czarnej dziury i pomyślałem, że niektórzy mogą być zainteresowani jego poznaniem.

statox
źródło
3
  1. Przejdź na początek „foo”. Prasa yiw. To szarpie wewnętrzne słowo.

  2. Idź do „paska” naciskając literę w. Następnie wybierz i odciągnij:viw"0p

Używam ciwi yiwdużo.

Xabierrek
źródło
4
Wykorzystanie obiektów tekstowych typu iwjest interesujące, ale twoje rozwiązanie jest w rzeczywistości takie samo jak jedno z CarpetSmokera: wizualnie wybierając drugie słowo i wstaw pierwsze. Myślę również, że twoje rozwiązanie działałoby z prostym pzamiast z użyciem "0rejestru.
statox
1
  • Gdy kursor znajduje się w dowolnym miejscu słowa,

    • yiw- szarpnij słowo i zapisz je w 0rejestrze.
  • Przejdź do słowa docelowego, które chcesz zastąpić

    • ciw usunie słowo i przejdzie w tryb wstawiania.
    • ctrl-r. Pojawi "się okienko z prośbą o wywołanie rejestru.
    • 0 wklei wyszarpane słowo.

Wyszarpane słowa są (normalnie!) Przechowywane w 0rejestrze. Zobacz, :registersaby wyświetlić zapisane bufory. To może wydawać się długą procedurą, IMHO otwiera drzwi do znacznie bardziej wyrafinowanych sztuczek rejestrowych.

Sat Yam
źródło