2010-10-21 10 views
12

Po wyszukaniu czegoś, jeśli trafisz na //, wydaje się, że otrzymujesz następny wynik. Czym się różni od n? Jak powinieneś go używać? Co pasuje do //e i jakie są inne opcje dla //?Jak działa polecenie wyszukiwania `//` w Vim?

+11

Najczęściej zadawane pytania mówią dość wyraźnie: "narzędzia programowe powszechnie używane przez programistów", więc nie sądzę, żeby to miało być zamknięte. Nie widzę wielu księgowych ani pracowników biurowych używających Vima :-) – paxdiablo

+0

Haha, a także cały tag poświęcony Vimowi. – Chetan

Odpowiedz

16

komenda Poszukiwania ma następujący format:

/pattern/offset<cr> 

Jeśli pattern część jest pominięta, wyszukiwanie wygląda na ostatni wzór, który był poszukiwany. Jeśli przesunięcie zostanie pominięte, nie zostanie zastosowane żadne przesunięcie. Przesunięcie jest po prostu tym, co zrobić z kursorem po znalezieniu elementu pattern.

Większość vi użytkownicy są zaznajomieni z wariacji bez offsetowej, /pax<cr> i powtarzania ostatniego wyszukiwania, /<cr>, co jest równoznaczne z n.

W swoich konkretnych przykładach //<cr> jest taki sam jak /<cr> i oznacza ponowne powtórzenie ostatniego wyszukiwania i nie stosuje przesunięcia.

Z drugiej strony, //e<cr> oznacza powtórzenie ostatniego wyszukiwania i przesunięcie kursora na koniec znalezionego elementu. Przesunięcia są:

[num]   [num] lines downwards, in column 1 
+[num]  [num] lines downwards, in column 1 
-[num]  [num] lines upwards, in column 1 
e[+num]  [num] characters to the right of the end of the match 
e[-num]  [num] characters to the left of the end of the match 
s[+num]  [num] characters to the right of the start of the match 
s[-num]  [num] characters to the left of the start of the match 
b[+num]  [num] identical to s[+num] above (mnemonic: begin) 
b[-num]  [num] identical to s[-num] above (mnemonic: begin) 
;{pattern} perform another search, see |//;| 

A plus lub minus bez num wykorzystuje 1.

+0

Doskonała, solidna odpowiedź! Dzięki! – Chetan

4

//<CR> oznacza powtórzyć wyszukiwanie ostatniego wzoru bez przesunięcia.

//e<CR> oznacza powtórzyć wyszukiwanie ostatniego wzoru, ale wylądować na końcu meczu.

n jest taka sama jak w /<CR> że wykorzystuje ostatnio wzorzec i ostatniej offsetowego, jednak n zachowuje ostatni kierunek podczas / zawsze znajdzie następny mecz.

Aby uzyskać dokładne wyjaśnienie tych poleceń i ich opcji, zobacz :h last-pattern i :h search-offset.

+0

Czy więc "//" rozpoczyna wyszukiwanie od góry pliku? – paxdiablo

+0

Nie, to wyszukuje z miejsca, w którym się znajdujesz. –

+2

Przesunięcie to (ogólnie) miejsce w pliku, zaczynając od góry. '//' powtórzy wyszukiwanie z miejsca, w którym się znajdujesz, podczas gdy 'n' powtórzy wyszukiwanie od miejsca ostatniego meczu. Nawiasem mówiąc, możesz użyć '//' również w poleceniach zastępczych i globalnych. Przydatne, jeśli masz do czynienia z wyjątkowo trudnym do wykonania dopasowaniem i chcesz go przetestować za pomocą zwykłego wyszukiwania. – Alligator

9

Jedną z ładnych funkcji // jest to, że można z niego korzystać za pomocą polecenia s. Jeśli więc najpierw wyszukujesz plik /Foo, a następnie postanawiasz go zastąpić przez Bar, możesz to zrobić bez powtarzania wzorca. Po prostu wykonaj: :%s//Bar/g

Oczywiście jest to o wiele bardziej przydatne, jeśli wzór jest nieco bardziej złożony.