Tìm kiếm tiếp theo trên đỉnh Vim


535

Để tìm kiếm chuyển tiếp trong Vim cho cake, tôi nhập /cake, nhưng con trỏ nhảy đến trận đấu đầu tiên khi tôi nhấn return. Có một lệnh Vim tương tự như "tìm tiếp theo" không?


33
Làm quen với việc sử dụng :help. :help /hiển thị trợ giúp về tìm kiếm và câu trả lời cho câu hỏi của bạn chỉ xuất hiện một chút trên trang.
Chris Morgan

Câu trả lời:


876

Nó là ncho tiếp theo và Ncho trước.

Và nếu bạn sử dụng tìm kiếm ngược với ?(ví dụ, ?cake) thay vì /, thì đó là cách khác.

Nếu nó được cài đặt trên hệ thống của bạn, bạn nên thử chạy vimtutorlệnh từ thiết bị đầu cuối của mình, nó sẽ bắt đầu một hướng dẫn về các lệnh Vim cơ bản.

Rob Wells tư vấn về *#cũng rất thích hợp.


1
xem thêm chỉ mục plugin tìm kiếm vim.org/scripts/script.php?script_id=1682
SergioAraujo

Có cách nào để nhảy sang trận đấu tiếp theo (không phải trong dòng hiện tại) không?
dùng13107

@ user13107: n và N hoạt động trên toàn bộ bộ đệm / tệp. Bạn không bị giới hạn trong dòng hiện tại.
Xavier T.

@XavierT. bất kỳ ý tưởng, làm thế nào tôi có thể nhảy một số kết quả cố định trong tìm kiếm. Tôi có nghĩa là ví dụ nhảy đến dòng phù hợp thứ 10
GP cyborg

@GPcyborg: ngiống như hầu hết toán tử vim có thể được thêm tiền tố vào một số để lặp lại lệnh. Nếu bạn gõ 10nnó sẽ chuyển đến kết quả thứ 10 (sau kết quả ban đầu). Nó cũng hoạt động cho tất cả các nhà điều hành chuyển động muốn 3jđi xuống 3 dòng.
Xavier T.

210

Phím tắt hữu ích nhất trong Vim, IMHO, là *phím.

Đặt con trỏ vào một từ và nhấn *phím và bạn sẽ chuyển sang phiên bản tiếp theo của từ đó.

Các #chính cũng làm như vậy, nhưng nó nhảy đến thể hiện trước đó của từ này.

Nó thực sự là một tiết kiệm thời gian.


6
Và trong trường hợp điều đó không rõ ràng, nNđưa bạn tiến và lùi qua các *trận đấu một khi bạn đã nhấn *. (Hoặc bạn chỉ có thể tiếp tục nhấn *để đi tiếp hoặc #đi lùi, nhưng sử dụng các phím được dịch chuyển đó thường không tối ưu.)
Herbert Sitz

3
@Herbert, thực sự n và N không đưa bạn "tiến" và "lùi". Như @Xavier đã lưu ý ở trên, n là tiếp theo và N là trước đó . Kiểm soát tìm kiếm tiến và lùi được thực hiện bằng cách nêu tìm kiếm bằng phím '/' và '?' phím hoặc bằng phím '*' và phím '#'.
Rob Wells

Tôi không nghĩ * có hữu ích không ... hầu hết thời gian tôi đang tìm kiếm một đoạn của từ (ví dụ: một phần của tên hàm). Tôi không muốn /Func, hãy đưa tôi đến SomeFuncvà sau đó nhấn '*' để chuyển sang phiên bản tiếp theo SomeFunckhi phiên bản tiếp theo xuất Funchiện SomeOtherFunc.
weberc2

Thậm chí tệ hơn, với C ++, tôi thấy nó không đi từ việc gọi phương thức đến thực hiện phương thức vì /\<foo\>không khớp"className::foo()"
puk

84

Khi tôi bắt đầu, tôi cần xem một bản demo .

Cách tìm kiếm trong Vim

  1. kiểu /
  2. gõ cụm từ tìm kiếm, ví dụ: "var"
  3. nhấn enter
  4. đối với trường hợp tiếp theo nhấn n(cho trước N )

2
*không đúng. Tức là một tập tin aa aaa. Tìm kiếm /aa, bạn phải phù hợp. Trong trận đấu đầu tiên, nhấn *thay đổi thuật ngữ tìm kiếm.
Bernhard

1
n không phải là 'tiếp theo' mà là "lặp lại tìm kiếm cuối cùng". Vì vậy, nhập? Var sẽ bắt đầu tìm kiếm từ vị trí hiện tại của bạn cho 'var'. Và 'N' thực sự là "lặp lại tìm kiếm cuối cùng theo hướng ngược lại", vì vậy, ví dụ này sẽ tìm kiếm xuống 'var' từ vị trí hiện tại.
Rob Wells



13

Như đã thảo luận, có một số cách để tìm kiếm:

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

cộng, điều hướng trước / tiếp theo với Nn.

Bạn cũng có thể chỉnh sửa / gọi lại lịch sử tìm kiếm của mình bằng cách kéo lên dấu nhắc tìm kiếm /và sau đó quay vòng với C-p/ C-n. Thậm chí hữu ích hơn là q/, nó đưa bạn đến một cửa sổ nơi bạn có thể điều hướng lịch sử tìm kiếm.

Ngoài ra để xem xét là tất cả quan trọng 'hlsearch'(loại :hlsđể kích hoạt). Điều này giúp dễ dàng tìm thấy nhiều phiên bản của mẫu của bạn. Bạn thậm chí có thể muốn làm cho trận đấu của bạn thêm sáng với một cái gì đó như:

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

Nhưng sau đó bạn có thể phát điên với các trận đấu màu vàng liên tục trên khắp màn hình của bạn. Vì vậy, bạn sẽ thường thấy mình sử dụng :noh. Điều này phổ biến đến mức một ánh xạ theo thứ tự:

nmap <leader>z :noh<CR>

Tôi dễ dàng nhớ điều này zvì tôi thường xuyên gõ /zz<CR>(đây là một sự cố không phổ biến nhanh) để xóa phần tô sáng của tôi. Nhưng :nohbản đồ là cách tốt hơn.


2
Nếu bạn cảm thấy được truyền cảm hứng q/, bạn cũng nên chơi với q:. Cả hai đều thực sự tiện dụng! (Tuy nhiên, không thực sự liên quan đến câu hỏi này.)
Micah Elliott

Cảm ơn, Micah. Tôi đã biết về 'q:', mặc dù tôi không sử dụng nó nhiều. Nhưng 'q /' đã hoàn toàn bị bỏ lỡ trong giáo dục vim của tôi và tôi nghĩ sẽ được sử dụng rất nhiều.
Stablesog

2

Nếu bạn nhấn Ctrl+ Entersau khi bạn nhấn một cái gì đó như "/ wordforsearch", thì bạn có thể tìm thấy từ "wordforsearch" trong dòng hiện tại. Sau đó nhấn ncho trận đấu tiếp theo; nhấn Ncho trận đấu trước.


1
"Khi chúng tôi thực hiện tìm kiếm, Vim quét về phía trước từ vị trí con trỏ hiện tại, dừng lại ở trận đấu đầu tiên mà nó tìm thấy." Như Vim thực tế chỉ ra.
bass chuck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.