Vim - wybierz tekst wyróżniony przez wyszukiwanie?

53

W vimie często wykonuję wyszukiwania, aby przeskoczyć do słowa lub frazy zamiast nawigować się tam h/j/k/l. Potem uderzyłem, naby przeskoczyć między wystąpieniami.

Powiedz, że mam ten tekst:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Piszę /an arrowi wciskam Enter. To zdanie jest podświetlone i przeskakuję do niego n.

Teraz chcę wizualnie zaznaczyć ten tekst , może go zmienić lub usunąć. (Tak, znam :spolecenie zamiany).

Ponieważ mój kursor znajduje się na literze „a” na początku „strzałki”, mogę nacisnąć v, a następnie nacisnąć ekilka razy, aby podświetlić całą frazę. Ale mam wrażenie, że istnieje krótszy i bardziej semantyczny sposób. W końcu określiłem już tekst, który mnie interesuje.

Jak napisać polecenie „wizualnie wybierz bieżący wybór wyszukiwania?”

Nathan Long
źródło

Odpowiedzi:

38

Możesz używać gnw wersji 7.4 lub nowszej (i gNcofać się). Zastępuje v//etrik.

Wyszukaj do przodu ostatnio używany wzorzec wyszukiwania, jak w przypadku `n`, i uruchom tryb wizualny, aby wybrać dopasowanie.

Zobacz :help gnlub ten Vimcast, aby uzyskać więcej informacji.

David Lord
źródło
To powiela komentarz do innej odpowiedzi i nie jest zbyt przydatne w obecnej formie. Dobrym pomysłem może być zacytowanie dokumentacji, aby odpowiedź była samodzielna.
bwDraco
2
Chętnie poprawię odpowiedź, ale nie jestem pewien, czy to pomogłoby. Pytanie precyzyjnie określa cel („wizualnie wybierz następny wynik wyszukiwania”) i gndziała dokładnie tak, jak zadano. Przesłanie go jako oddzielnej odpowiedzi podkreśla, że ​​jest to kompletny zamiennik v//e. Właśnie zredagowałem swoją odpowiedź, aby dodać dokumentację, czy to jest lepsze?
David Lord,
To dobrze, dziękuję. Jeśli potrzebujesz pomocy, koniecznie sprawdź przewodnik i centrum pomocy . Witamy w Super User i mamy nadzieję, że będziesz zadowolony z pobytu.
bwDraco
1
Fantastyczny! Dziękujemy za aktualizację tego wątku o najnowsze i najlepsze. :)
Nathan Long
29

Spróbuj tego:

/an arrow
v//e

Przechodzi w tryb wizualny, powtarza ostatnie wyszukiwanie i wybiera do końca.

Dennis Williamson
źródło
1
Od wersji Vima 7.4 gnrobi to również (bez zmiany, co to noznacza)
smat
8

Przekonałem się, że v//esamo w sobie jest niewystarczające, ponieważ po wyjściu z trybu wizualnego przeskakiwanie do następnego / poprzedniego wyniku wyszukiwania powoduje umieszczenie kursora na końcu wyniku, a nie na jego początku, jak zwykle można oczekiwać.

Aby to naprawić, powinniśmy najpierw przejść do końca wyniku wyszukiwania ( //e), a następnie wizualnie wybrać do jego początku ( v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Twoje zdrowie.

sunaku
źródło
Dla symetrii: nnoremap g? ??b<cr>v//e<cr>(robi to samo, ale szuka do tyłu zamiast do przodu)
Kyle Strand
2

Jest teraz wtyczka Vim-Search-Objects, która sprawia, że ​​Vim traktuje dopasowania wyszukiwania jako zwykłe obiekty tekstowe, dzięki czemu możesz po prostu va/(wizualnie wybrać dopasowanie) po przeprowadzeniu wyszukiwania.

sunaku
źródło
1

„Głupszym” sposobem na to jest mapowanie klucza (w tym przypadku F5), jak poniżej:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

Po /an arrowtrafieniu F5.

Jasio
źródło
To wybiera jeszcze jedną postać z powodu +1. Pomiń to, a wybierze tylko szukaną część. Z drugiej strony nnoremap <F5> v//e<CR>wydaje się , że działa dobrze.
Dennis Williamson
@Dennis Williamson, + 1 jest konieczne, aby wybrać dokładnie to, czego szukano, jeśli usuniesz +1, ostatni znak nie zostanie wybrany, ponieważ nie wybierze znaku, w którym znajduje się kursor. Jakikolwiek sposób nnoremap <F5> v // e <CR> jest znacznie lepszy.
Johnny
To dla mnie wybiera postać. Jeśli nacisnę xlub cpo zrobieniu, F5ale bez +1całego łańcucha wyszukiwania, łącznie ze znakiem pod kursorem, zostanie usunięty.
Dennis Williamson
@Dennis Williamson, właśnie dowiedziałem się, że moja opcja „selekcji” jest ustawiona na „wyłączne”, ale domyślna wartość to „włącznie”. Właśnie dlatego zadziałało dla ciebie bez +1. (Patrz: wybór pomocy)
Johnny