Wyszukaj zaznaczenie w vimie

107

Pisząc w C ++ używam wtyczek vim i vim dla Visual Studio. Często szukam ciągu znaków w funkcji, na przykład przy każdym wywołaniu funkcji object->public_member.memberfunc().

Wiem, że vim oferuje wygodny sposób wyszukiwania pojedynczego słowa, naciskając *i #, a także może wyszukiwać wpisane ciągi za pomocą polecenia wszechobecnego ukośnika /. Podczas próby wyszukania wszystkich wystąpień dłuższego ciągu, takiego jak powyższy, ponowne wpisanie po nim zajmuje trochę czasu /.

Czy istnieje sposób wyszukiwania zaznaczenia? Na przykład zaznacz za pomocą v, a następnie skopiuj za pomocą y, czy istnieje sposób na wklejenie po /? Czy jest łatwiejszy skrót?

Marcin
źródło
Możliwe powtórzenie Jak szukać zaznaczonego tekstu?
acm

Odpowiedzi:

154

Sprawdź tę wskazówkę Vima: Szukaj wizualnie zaznaczonego tekstu

Lub możesz po prostu szarpnąć zaznaczony tekst za pomocą y i przejść do trybu wyszukiwania / , a następnie możesz wkleić ostatni szarpany tekst za pomocą Ctrl + R 0

CMS
źródło
4
@CMS. Dzięki. Świetna wskazówka! Użycie: reg, aby zobaczyć, co jest w twoich rejestrach, a następnie użycie cntl-R N do uzyskania tego, co jest w rejestrze N jest doskonałe!
Rob Wells,
85

Odpowiedź

  1. Szarpnij tekst, który chcesz wyszukać
  2. q/p
  3. Enter

Wyjaśnienie

q/działa podobnie do wyszukiwania zwykłego, /z wyjątkiem tego, że jesteś w trybie poleceń, więc w przeczywistości wykonuje polecenie „wklej” zamiast wpisywania znaku p. Więc powyższe skopiuje szukany tekst i wklei go do wyszukiwania.

Aby uzyskać więcej informacji, wpisz :help q/

Cory Klein
źródło
4
Podoba mi się ten, ponieważ wpisywanie <ctrl-r> jest dla mnie niewygodne.
Sty,
Doskonały! Używając emacsa w evil-mode, to faktycznie działa, podczas gdy zaakceptowana odpowiedź psuje się żałośnie (prawdopodobnie z powodu użycia Ctrlklucza).
eestrada
2
Świetnie sprawdza się w przypadku prostych ciągów, ale nie wymyka się znakom specjalnym wyrażenia regularnego, jak wspomniano w komentarzu do innej odpowiedzi .
Bluu
1
I nawet nie musisz go szarpać. Wybierz go na visual, q/gvpgdzie gvoznacza ostatnią wizualną selekcję ...
1
@nwildner, q/gvpnie działa dla mnie. Czy mógłbyś wyjaśnić swoją sugestię?
bam
38

Użyj q / zamiast po prostu / . (Ten sam z Q : ). Teraz możesz edytować VIM poprzez historię poleceń i wyszukiwania! (Spróbuj czasem Ctrl-N i Ctrl-P).


źródło
10

Właśnie się dowiedziałem (dzięki doskonałej książce Practical Vim ), że istnieje do tego wtyczka. Możesz znaleźć wtyczkę na GitHub .

Wtyczka umożliwia wyszukiwanie wizualnego wyboru za pomocą *i #.

cutemachine
źródło
5
Zauważ, że inne odpowiedzi nie powodują ucieczki. Korzystając z tych metod, żadne wybrane metaznaki nie będą wyszukiwane dosłownie, w zależności od bieżącego magicustawienia. Może to nawet spowodować niepowodzenie wyszukiwania metaznaków wymagających wyważenia. Wspomniana tutaj wtyczka wykona znak zmiany znaczenia przed wyszukaniem zaznaczonego tekstu.
Kurt Hutchinson
1
to działa, ale niestety nie możesz nprzejść do następnej znalezionej pozycji, podczas gdy podejście Cory'ego i CMS na to pozwala ..
Ayrat
2

Możesz faktycznie zaznaczyć tekst wizualnie i nacisnąć * i #, aby wyszukać następne wystąpienie ... Będzie działać tak samo, jedyne zastrzeżenie jest takie:

Biała spacja w zaznaczeniu odpowiada dowolnej białej spacji podczas wyszukiwania (wyszukanie „hello world” spowoduje również znalezienie słowa „hello” na końcu wiersza, ze słowem „world” na początku następnego wiersza).

http://vim.wikia.com/wiki/Search_for_visually_selected_text

AhHatem
źródło
2
dla mnie wizualne zaznaczenie tekstu, a następnie naciśnięcie * tylko rozszerza mój wizualny wybór.
martin Jakubik
Nie możesz domyślnie, chyba że umieścisz w vimrc mapowanie ze strony ..
Ayrat