2013-03-06 14 views
9

Próbuję dowiedzieć się, jak dt lub df ostatnie wystąpienie znaku w ciągu znaków.Vim - Usuń do ostatniego wystąpienia znaku w linii

Na przykład, powiedzmy, że mam następujący wiersz:

foo not.relevant.text.bar

Gdybym f df. I expectedly dostać foo relevant.text.bar ale chciałbym dostać foo bar. Używanie f 3df. nie jest opcją, ponieważ nie wiem, ile znaków będzie w ciągu znaków. Dodatkowo, mogę chcieć uzyskać foo .bar (f 3dt.), lub jeśli linia kończy się kropką, mogę uzyskać foo .. Chcę zawsze znaleźć ostatnią, niezależnie od tego, ile tam jest.

Czy to możliwe bez wyrażeń regularnych? Przypuszczam, że mógłbym użyć wyrażenia regularnego, ale miałem nadzieję, że istnieje proste polecenie vim, którego mi brakuje. Często próbuję coś takiego zrobić.

+1

Czy zawsze chcesz usunąć od początku linii? jeśli tak, to po prostu do końca linii szukanie wstecz '$ F.d0' –

+0

Jeśli przeszukuję wstecz, to będę musiał znaleźć pierwsze wystąpienie znaku w ciągu, ponieważ nadal chcę wszystkiego przed pierwszym spacjarem. – Rob

Odpowiedz

8

Możesz użyć mojego JumpToLastOccurrence plugin. Zapewnia on komendy, które właśnie to robią.

+1

Działa idealnie. Właśnie tego szukałem. Dzięki. – Rob

+0

Oto lustro Github dla użytkowników VimPlug: https://github.com/vim-scripts/JumpToLastOccurrence i https://github.com/vim-scripts/ingo-library i https://github.com/tpope/vim -repeat (zależności) –

4

użyłbym f df...

To niekoniecznie jest krótszy wpisywać, ale łatwiej jest użyć „Powtórz ostatnią komendę” niż liczenie z góry liczbę słowo/zdanie chcę usunąć.

Następnie możesz zmienić numer typu ., aby dostosować długość ciągu, który chcesz usunąć.

+0

To jest prawie to, co robiłem cały czas i jest w porządku przez większość czasu, chyba że chcę go użyć w makrze. – Rob

12

jeden sposób bez użyciu regex, bezlicząc "kropka" (mogą być inne litery) ... sprawdzić, czy inni mają lepszą drogę ..

foo[I]not.relevant.text.bar ([I] is cursor)

można spróbować:

lmm$T.d`m 

lub w tym formacie, może wyglądać lepiej?

lmm$T.d`m

to będzie wykonać zadanie. możesz utworzyć mapowanie, jeśli używasz tego często.

EDIT

dodam animację GIF, aby pokazać to działa.:)

uwaga

Wpisałem @= w trybie normalnym po przeprowadzce mój kursor do punktu prawej wyjściowy (przez f(space)), aby wyświetlić przyciski Nacisnąłem w wierszu poleceń.

enter image description here

+0

próbowałeś tego? Próbowałem, ale "zabiera mnie do żebrania linii. –

+0

gdzie był twój kursor po rozpoczęciu pisania "mm"? to cię tam sprowadzi. Po prostu próbowałem, zadziałało dobrze. – Kent

+0

+1, ponieważ jest to bardzo sprytne. Jednak nie działa, jeśli wiersz kończy się na '.' – Rob

0

W trybie wizualnym:

$F.d^ 

$ idzie do końca bieżącego wiersza, F wyszukuje wstecz na okres d^usuwa aż do początku linii.

+0

O, przepraszam, to nie pomija tekstu przed pozycją kursora, kiedy zaczynasz. –

+0

Jeśli sprawi, że poczujesz się lepiej: pomogło mi znaleźć sposób na "skok do ostatniego wystąpienia" :): '$ F. –

Powiązane problemy