Đánh dấu một cụm từ tìm kiếm mà không di chuyển con trỏ


15

Sử dụng Vim, đôi khi tôi thấy mình nhìn chằm chằm vào một phần của mã nguồn trong một thời gian và đột nhiên muốn một số biến trên màn hình bật ra. Điều đó thật dễ dàng: /<var>làm nổi bật tất cả. Vấn đề của tôi là nó thường xuyên hơn không phải là tìm kiếm làm thay đổi cửa sổ của tôi vì vậy tôi không nhìn vào mã nguồn từ cùng một nơi. Ngay cả khi nó chỉ thay đổi một vài dòng, nó vẫn khiến tôi thất vọng vì tôi cần mất vài giây để tìm ra nơi mà mọi thứ đã chuyển đến.

Có thể đánh dấu một cụm từ tìm kiếm mà không di chuyển con trỏ đến trận đấu tiếp theo không?


2
Không chính xác là một câu trả lời, nhưng tôi chỉ sử dụng hai backticks (``) để nhảy đến nơi tôi đã ở trước đó.
Izkata

Câu trả lời:


1

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

Nếu bạn đã sử dụng plugin này, bạn chỉ cần kích hoạt chức năng

\ m

sau đó sử dụng phím NumPad để gán màu cho từ đó ở mọi nơi mà không cần di chuyển con trỏ.

1

Bạn có thể sử dụng nhiều điểm nổi bật khác nhau cùng một lúc cho nhiều từ khác nhau hoặc các mẫu tìm kiếm phức tạp hơn nếu bạn muốn.


Tôi thích plugin này!
Andrew Wood

15

Câu trả lời của skyblue cho thấy cốt lõi của ý tưởng về cách sử dụng tô sáng tìm kiếm thông thường để thực hiện những gì bạn muốn.

Tôi đã mở rộng kỹ thuật đó bằng cách tạo một keybinding hoạt động tương tự *lệnh , nhưng không thực sự chuyển sang trận đấu tiếp theo.

Tôi xin cảm ơn garyjohn vì đã chỉ ra lựa chọn từ expand()tương đương *(để tránh sử dụng *chính nó và khôi phục chế độ xem). Điều này đơn giản hóa mã đủ để nó có thể đi trực tiếp vào ánh xạ (tránh sử dụng hàm). Tôi cũng đã thêm một ánh xạ phù hợp với các từ một phần (như g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>

1
Bạn có thể tránh các cuộc gọi đến winaveview (), winrestview () và normal *bằng cách thay thế let @/ = @/bằng let @/ = expand("<cword>").
garyjohn

@ÿjohn: Vâng, điều đó tốt hơn. Tôi không chắc chắn có một cái gì đó tương đương với lựa chọn từ ngữ của Viking được thực hiện bởi *, nhưng <cword>nó là.
Chris Johnsen

13

Bạn cũng có thể đặt thanh ghi tìm kiếm thành biến bạn muốn khớp.

Trước tiên, hãy đảm bảo đánh dấu tìm kiếm được bật:

:set hlsearch

Sau đó, bạn có thể đặt đăng ký tìm kiếm với:

:let @/="variable"

Điều này sẽ làm nổi bật tất cả các lần xuất hiện của biến mà không nhảy sang trận đấu tiếp theo.

Để biết thêm thông tin, xem :help @/


7

Một cách là sử dụng :matchlệnh, ví dụ:

:match Question '^R^W'

Điều đó sẽ làm nổi bật từ dưới con trỏ bằng cách sử dụng nhóm Đánh dấu câu hỏi. Tôi thường sử dụng nhóm Câu hỏi vì trên thiết bị đầu cuối của tôi, nó có màu xanh lục đẹp. Để xem các nhóm nổi bật có sẵn, thực hiện

:hi

Các ^Rvà lần lượt ^Wlà Ctrl-R và Ctrl-W và được thay thế bằng từ bên dưới con trỏ. Xem

:help c_CTRL-R_CTRL-W

để biết thêm về điều đó. Xem

:help :match

để biết thêm về :matchlệnh. Để xóa phần tô sáng đó, chỉ cần thực hiện

:match

không có đối số.


1

Ngoài:

 :set hlsearch

Bạn có thể muốn:

 : set noincsearch

0

Tương tự như *chúng ta có:

[I ............................. it show where the word under the cursor appears

Đó là giá trị có một cái nhìn vào :h [I. ở đó chúng tôi tìm thấy một số điều thú vị liên quan đến nhu cầu của bạn.

Có một câu hỏi tương tự trên stackoverflow nơi tôi đặt câu trả lời của mình (hoàn chỉnh hơn một chút)

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.