Jak wyszukać zaznaczony tekst w Vimie?

61

Wiem, że mogę użyć /wyrażenia regularnego, aby wyszukać coś. I mogę użyć ?do wyszukiwania wstecz. I mogę użyć ni Npowtórzyć wyszukiwanie do przodu i do tyłu.

Istnieją również dwa ładne skróty: *lub #będą wyszukiwać słowo pod kursorem (do przodu / do tyłu). To bardzo przydatne! (są też g*i g#warianty)

Ale ... Po wybraniu tekstu za pomocą trybu wizualnego ( v), jak mogę poprosić Vima o wyszukanie dokładnie tego tekstu? Szybkie spojrzenie na :helpnie ... huh ... nie pomogło mi.

Denilson Sá Maia
źródło
3
Powiązane z wyszukiwaniem wyboru w Vimie .
Rodrigue
Dzięki za wskazówki z *i #! Byłoby miło, jeśli pytanie będzie również wyjaśnić, co g*i g#zrobi;)
winklerrr

Odpowiedzi:

22

Poniższa sekwencja zrobi to, co chcesz, biorąc pod uwagę już zaznaczony blok tekstu:

  • y( "domyślnie przeciągnij zaznaczony tekst do rejestru)
  • / (wejdź w tryb wyszukiwania)
  • ( \ V) (opcjonalnie, wprowadź tryb „bez magii” *)
  • Ctrl+ r "(wstaw tekst z "rejestru)
  • Enter (Angażować!)

(*) Tryb „bardzo bez magii” interpretuje następujący tekst jako zwykły tekst zamiast jako wyrażenie regularne. jednak pamiętać, że \i /nadal są szczególne i będą musiały być obsługiwane w inny sposób. Jeśli tekst nie zawiera żadnych znaków uznanych za specjalne, możesz pominąć ten krok.

Źródło: Vim Tips Wiki

glennsl
źródło
1
Dziękuję Ci! Jest to o wiele bardziej zrozumiałe niż „jak to zrobić” na vim.wikia stronie
winklerrr
64

Najpierw możesz podciągnąć podświetlony tekst. Następnie

  • /

  • Ctrlr

  • "

Co wklei to, co szarpałeś po /.

świnia
źródło
7
Fajny pomysł ... poza tym, że wklejony tekst będzie interpretowany jako wyrażenie regularne, co nie jest pożądane. :-(
Denilson Sá Maia
4
Jeśli jest to dla ciebie prawie wystarczające, możesz /\V<C-r>"zamiast tego zrobić . Przygotowując się \Vdo zapytania, mówisz vimowi, żeby używał „bardzo bez magii”. Odwrotne ukośniki mogą nadal powodować problemy. Zobacz:help \V
idbrii,
3
Pomocne może być wyjaśnienie, w Ctrl+Rjaki sposób uzyskujesz dostęp do rejestru i *jest to po prostu rejestr schowka systemowego. Na przykład możesz także: yawszarpnąć słowo do rejestru "(rejestr domyślny), a następnie /<C-r>"wyszukać ten ciąg.
Ben Davis,
5
@ DenilsonSá - Możesz użyć tego rozwiązania, ale zamiast /przeprowadzać wyszukiwanie, użyj ?zamiast tego, ponieważ wyszukiwania wsteczne domyślnie usuwają ukośniki. Następnie możesz nacisnąć, Naby kontynuować wyszukiwanie w kierunku do przodu.
Brad Parks
7

Nigdy nie czułem potrzeby takiej funkcji, ale biorąc pod uwagę, że możesz znaleźć taką potrzebę w Vimie, myślę, że powinno to pomóc:

Wyszukaj wizualnie zaznaczony tekst

Nie przetestowałem tego, ale patrząc na kod, wydaje się, że jest dokładnie tym, czego szukasz.

slhck
źródło
4

Metodę tworzenia tego zachowania można znaleźć tutaj na wiki wiki .

akf
źródło
Fajnie, okazało się, że wersja, która wymyka się ukośnikom, jest pomocna. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
wyrób
1

To rozwiązanie zapewnia wizualnie wybrany kontekst wyszukiwania vim, nawet w przypadku znaków wielowierszowych i znaków ucieczki.

Dodaj następujący kod do siebie .vimrci przeszukuj wizualnie wybraną treść według //. Możesz również globalnie zastąpić wybraną treść przez /s. Lub Lokalnie zamień //najpierw wybrany kontekst , a następnie wizualnie wybierz region i :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Powyższa konfiguracja dotyczy tylko wyszukiwania. Dla całej mojej konfiguracji vima, odwiedź .vimrc

Charles X.-T. Li
źródło
0

W moich konfiguracjach na dwóch osobnych komputerach, jeśli zaznaczę tekst, a następnie kliknę /go, automatycznie wyszuka wybrany tekst.

Nathan Fellman
źródło
To nie jest domyślne zachowanie. Tutaj, kiedy naciskam / (w trybie wizualnym), pokazuje tylko pusty monit o wyrażenie regularne, czekając, aż coś wpisam.
Denilson Sá Maia,
Dziwne, ponieważ nigdy nie zrobiłem nic, aby to umożliwić.
Nathan Fellman,
3
Wiele dystrybucji dostarcza niestandardową konfigurację vim jako domyślną (prawdopodobnie dlatego, że standardowa konfiguracja vim wyłącza wiele przydatnych funkcji, głównie dla kompatybilności z vi).
sleske