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?”

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.


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.


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.