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”?
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.
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.
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()"
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.
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.
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.
„Kiedy wykonujemy wyszukiwanie, Vim skanuje do przodu od bieżącej pozycji kursora, zatrzymując się przy pierwszym znalezionym dopasowaniu.” Jak zauważa Practim.
:help
.:help /
pokazuje pomoc w wyszukiwaniu, a odpowiedź na twoje pytanie pojawia się nieco na dole strony.Odpowiedzi:
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ć
vimtutor
komendę z terminala, który uruchomi samouczek podstawowych komend Vima.Rob Wells porady na temat *i #jest również bardzo istotne.
źródło
n
jak większość operatorów vim może być poprzedzony liczbą, aby powtórzyć polecenie. Jeśli wpiszesz10n
, przejdzie do 10. wyniku (po początkowym). Działa również dla wszystkich operatorów ruchu, takich jak3j
zejście o 3 linie.*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.
źródło
n
iN
zabierze 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.)/Func
, mają potrwać do mnieSomeFunc
, a następnie nacisnąć „*”, aby przejść do następnego wystąpieniaSomeFunc
podczas następnej instancjiFunc
jestSomeOtherFunc
./\<foo\>
nie pasuje"className::foo()"
Kiedy zaczynałem, musiałem obejrzeć demo .
Jak szukać w Vimie
/
źródło
*
jest nieprawidłowe Tjaa aaa
. Plik . Szukaj/aa
, musisz dopasować. Przy pierwszym dopasowaniu naciśnięcie*
zmienia wyszukiwane hasło.Być może szukasz nklucza.
źródło
Pisanie nprzejdzie do następnego dopasowania.
źródło
Jak omówiono, istnieje kilka sposobów wyszukiwania:
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 jestq/
przejście do okna, w którym możesz poruszać się po historii wyszukiwania.Również do rozważenia jest najważniejszy
'hlsearch'
(typ,:hls
aby włączyć). To znacznie ułatwia znalezienie wielu wystąpień twojego wzoru. Możesz nawet rozjaśnić swoje mecze za pomocą czegoś takiego: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:Z łatwością pamiętam ten, ponieważ
z
od zawsze pisałem/zz<CR>
(co jest rzadkim przypadkiem szybkiego pisania), aby usunąć zaznaczenie. Ale:noh
mapowanie jest znacznie lepsze.źródło
q/
, powinieneś także graćq:
. Oba są naprawdę przydatne! (Nie do końca jednak związane z tym pytaniem.)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.
źródło