„Znajdź następny” w Vimie


535

Aby wyszukać do przodu w vim dla cake, chciałbym wpisać /cake, ale kursor przeskakuje do pierwszego meczu po naciśnięciu powrót. Czy istnieje polecenie Vima analogiczne do „znajdź następne”?


33
Przyzwyczaj się do korzystania :help. :help /pokazuje pomoc w wyszukiwaniu, a odpowiedź na twoje pytanie pojawia się nieco na dole strony.
Chris Morgan

Odpowiedzi:


876

To jest ndla następnego i Ndla poprzedniego.

A jeśli używasz wyszukiwania wstecznego z ?(na przykład ?cake) zamiast /, jest odwrotnie.

Jeśli jest zainstalowany w twoim systemie, powinieneś spróbować uruchomić vimtutorkomendę z terminala, który uruchomi samouczek podstawowych komend Vima.

Rob Wells porady na temat *i #jest również bardzo istotne.


1
patrz także wtyczka wyszukiwania indeksu vim.org/scripts/script.php?script_id=1682
SergioAraujo

Czy istnieje sposób na przejście do następnego meczu (nie w bieżącym wierszu)?
user13107

@ user13107: n i N działają na całym buforze / pliku. Nie jesteś ograniczony do bieżącej linii.
Xavier T.

@XavierT. jakikolwiek pomysł, jak mogę przeskoczyć określoną liczbę wyników w wyszukiwaniu. Mam na myśli, na przykład, skok do 10. pasującej linii
GP cyborga

@GPcyborg: njak większość operatorów vim może być poprzedzony liczbą, aby powtórzyć polecenie. Jeśli wpiszesz 10n, przejdzie do 10. wyniku (po początkowym). Działa również dla wszystkich operatorów ruchu, takich jak 3jzejście o 3 linie.
Xavier T.,

210

*Kluczem jest najbardziej przydatny skrót w Vimie, IMHO .

Umieść kursor na słowie i naciśnij *klawisz, a przejdziesz do następnej instancji tego słowa.

#Klucz robi to samo, ale przeskakuje do poprzedniego wystąpienia tego słowa.

To naprawdę oszczędność czasu.


6
Aw przypadku nie było to oczywiste, ni Nzabierze Cię do przodu i do tyłu poprzez *meczów kiedy już wciśnięty *. (Lub może po prostu naciskać *, aby przejść do przodu lub #cofnąć się, ale przy użyciu tych przesuniętych-kluczy jest ogólnie nieoptymalne.)
Herbert Sitz

3
@Herbert, właściwie n i N nie biorą cię odpowiednio „do przodu” i „do tyłu”. Jak zauważono powyżej @Xavier, n jest następny, a N poprzedni . Kontrola wyszukiwania do przodu i do tyłu odbywa się poprzez podanie wyszukiwania za pomocą przycisku „/” i „?” klawisz lub klawisz „*” i klawisz „#”.
Rob Wells,

Nie sądzę, by * było takie przydatne ... przez większość czasu szukam fragmentu słowa (na przykład części nazwy funkcji). I nie chcą /Func, mają potrwać do mnie SomeFunc, a następnie nacisnąć „*”, aby przejść do następnego wystąpienia SomeFuncpodczas następnej instancji Funcjest SomeOtherFunc.
weberc2,

Co gorsza, w C ++ uważam, że nie przechodzi od wywołania metody do implementacji metody, ponieważ /\<foo\>nie pasuje"className::foo()"
puk

84

Kiedy zaczynałem, musiałem obejrzeć demo .

Jak szukać w Vimie

  1. rodzaj /
  2. wpisz szukany termin, np. „var”
  3. naciśnij enter
  4. dla następnej instancji naciśnij n(dla poprzedniej N )

2
Wpisywanie *jest nieprawidłowe Tj aa aaa. Plik . Szukaj /aa, musisz dopasować. Przy pierwszym dopasowaniu naciśnięcie *zmienia wyszukiwane hasło.
Bernhard

1
n nie jest „następnym”, ale „powtórz ostatnie wyszukiwanie”. Więc wpisanie? Var rozpocznie wyszukiwanie w górę od bieżącej pozycji dla „var”. A „N” to tak naprawdę „powtórz ostatnie wyszukiwanie w przeciwnym kierunku”, więc w tym przykładzie szukałby „var” w dół od bieżącej pozycji.
Rob Wells,



13

Jak omówiono, istnieje kilka sposobów wyszukiwania:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

plus, nawigacja poprzedni / następny za pomocą Ni n.

Możesz także edytować / przywoływać swoją historię wyszukiwania, pociągając w górę wiersz wyszukiwania za pomocą, /a następnie cyklicznie za pomocą C-p/ C-n. Jeszcze bardziej użyteczne jest q/przejście do okna, w którym możesz poruszać się po historii wyszukiwania.

Również do rozważenia jest najważniejszy 'hlsearch'(typ, :hlsaby włączyć). To znacznie ułatwia znalezienie wielu wystąpień twojego wzoru. Możesz nawet rozjaśnić swoje mecze za pomocą czegoś takiego:

hi Search ctermfg=yellow ctermbg=red guifg=...

Ale wtedy możesz oszaleć z ciągłymi żółtymi zapałkami na całym ekranie. Więc często będziesz używać :noh. Jest to tak powszechne, że mapowanie jest w porządku:

nmap <leader>z :noh<CR>

Z łatwością pamiętam ten, ponieważ zod zawsze pisałem /zz<CR>(co jest rzadkim przypadkiem szybkiego pisania), aby usunąć zaznaczenie. Ale :nohmapowanie jest znacznie lepsze.


2
Jeśli czujesz się zainspirowany q/, powinieneś także grać q:. Oba są naprawdę przydatne! (Nie do końca jednak związane z tym pytaniem.)
Micah Elliott,

Dzięki, Micheasz. Wiedziałem już o „q:”, chociaż nie używam go zbyt często. Ale „q /” zostało całkowicie pominięte w mojej edukacji vim i myślę, że przyda się wiele.
Stabledog,

2

Jeśli naciśniesz Ctrl+ Enterpo naciśnięciu czegoś takiego jak „/ wordforsearch”, możesz znaleźć słowo „wordforsearch” w bieżącym wierszu. Następnie naciśnij, naby przejść do następnego meczu; naciśnij, Naby przejść do poprzedniego meczu.


1
„Kiedy wykonujemy wyszukiwanie, Vim skanuje do przodu od bieżącej pozycji kursora, zatrzymując się przy pierwszym znalezionym dopasowaniu.” Jak zauważa Practim.
uchwyt basowy
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.