Usuń od kursora do n-tego wystąpienia znaku x

16

Wiem, że mogę usunąć z kursorem aż włącznie pierwszego wystąpienia danego znaku X z d/x<CR>lub ze v/x<CR>djeśli chcę zobaczyć wybór, a następnie usunąć. Jak mogę usunąć z bieżącej pozycji kursora do n- tego wystąpienia x ?

Na przykład, jeśli kursor znajduje się za pierwszą spacją w

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada x

xx

i wpisuję polecenie, aby usunąć do trzeciego x wynik musi być:

yada
xx

Erwin Rooijakkers
źródło

Odpowiedzi:

22

Możesz to zrobić :

wd4/x<Enter>

Jeśli zaczniesz w lewym górnym rogu tekstu

Wyjaśnienie

  • w : przejście do początku następnego słowa
  • d : usunąć
  • 4/x<Enter> : do czwartego wystąpienia x

Jeśli nie wiesz, ile razy chcesz to zrobić wcześniej, możesz również: d/x<Enter>a następnie nacisnąć, .aby powtórzyć

edi9999
źródło
5
Końcówka Bonus: To działa również fi przyjaciele ( F, t, T, ;): np 2fxbędzie Ci na sekundę x, lub 2;powtórzy ostatni fdwukrotnie.
Martin Tournoij
1
@Carpetsmoker: Działa to tylko w przypadku liter w bieżącym wierszu.
Jürgen Krämer,
5

Możesz to zrobić, pisząc

<n>df<x>

gdzie:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x
kapil
źródło
0
<n>macro 

jest powszechnie używany w vimie do powtarzania makra „n” razy.

więc aby usunąć do pierwszego wystąpienia x, użyłbyś 1dfx. Podobnie, aby usunąć do trzeciego wystąpienia x, użyłbyś 3dfx.

thenakulchawla
źródło
1
Myślę, że przegapiłeś słowo „makro”: w vim makro jest sekwencją klucza zapisaną w rejestrze i wywołujesz @xgdzie xjest twój rejestr. To, o czym mówisz, to polecenie trybu normalnego.
statox
Tak, miałem na myśli normalne polecenie. Ale dotyczy to również makra. Możemy uruchomić makro n razy, dodając liczbę przed makrem.
thenakulchawla
1
Tak to prawda. Właśnie wskazałem, że <n>macronie jest to standardowa notacja w vimie dla makr, a ponieważ twoja odpowiedź używa polecenia trybu normalnego, jest prawie taka sama jak komenda kapila.
statox
0

Dany:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

gdzie $wskazują końce linii ( :set listtryb), jeśli kursor znajduje się na początku drugiej yadalinii w pierwszym wierszu, najpierw musimy cofnąć się do poprzedniej spacji za pomocą h, aby uwzględnić ją podczas usuwania. Więc po prostu 4d/xEnter. Innymi słowy, tylko liczba przed d/x. Wynik jest dokładnie:

yada$
xx$
Kaz
źródło