Làm cách nào để tự động tắt các hlsearch của Google sau khi tôi tìm kiếm xong?


19

Tôi thích cài đặt "hlsearch", nhưng sau khi tôi tìm kiếm xong, tôi thấy nó thật đáng ghét. Đặc biệt là nếu tôi tìm kiếm một cái gì đó có rất nhiều trận đấu. Tôi biết rằng tôi có thể tắt cái này với

:set nohlsearch

Nhưng việc này mất toàn bộ 16 lần nhấn phím và thậm chí khó chịu hơn, tôi phải bật lại cho tìm kiếm tiếp theo của mình với

:set hlsearch    

Có cách nào để tôi có thể tự động bật tìm kiếm khi tôi bắt đầu tìm kiếm và tắt khi tôi tìm kiếm xong không? Ví dụ: nếu tôi vào chế độ chèn hoặc sửa đổi văn bản, có tắt hlsearch mà không cần thêm bất kỳ tổ hợp phím nào không?


3
Xác định tự động.
Antony

@Antony Như trong, nếu tôi đang chỉnh sửa hoặc ở chế độ chèn, nó sẽ tắt mà không cần tôi nhấn bất kỳ nút nào. Nếu tôi bắt đầu tìm kiếm bằng /hoặc ?, hoặc nếu tôi nhấn nhoặc N, nó sẽ bật mà không cần tôi nhấn bất kỳ nút nào nữa.
DJMcMayhem

1
Ồ và xác định tìm kiếm "xong"
Christian Brabandt

1
:nno <BS> :set hls!\|set hls?<CR>- một dòng, một phím bấm, phản hồi trạng thái và không cố gắng đoán thứ hai khi bạn có thể hoặc không muốn làm nổi bật. Đôi khi tôi muốn đánh dấu bên trái trên màn hình khi chỉnh sửa. Đôi khi tôi không, ví dụ như sử dụng /như một chuyển động với một nhà điều hành.
Antony

nnoremap <M-\> :set hlsearch!<CR><Bar>:echo 'hlsearch: ' . ['Off', 'On'][&hlsearch]<CR>
Sato Katsura

Câu trả lời:


25

Có một cách thuận tiện hơn nhiều. Thay vì sử dụng

:set nohlsearch

mà thực sự tắt thiết lập hlsearch, sử dụng

:nohls

Điều này sẽ chỉ tắt hlsearch cho đến khi bạn tìm kiếm lại. Từ:help nohls

                 *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
'hlsearch' 'hls'    boolean (default off)
            global
            {not in Vi}
            {not available when compiled without the
            |+extra_search| feature}

    ...

    When you get bored looking at the highlighted matches, you can turn it
    off with |:nohlsearch|.  This does **not change the option value**, as
    soon as you use a search command, the highlighting comes back.

Tuy nhiên, giải pháp này không hoàn hảo, vì bạn vẫn phải gõ loại :nohlsđau sau mỗi lần tìm kiếm. Bạn có thể giải quyết vấn đề này bằng một ánh xạ, vd

nnoremap <esc><esc> :silent! nohls<cr>

Nhưng có một giải pháp thậm chí tốt hơn ! haya14busa / incsearch.vim . Đây là, ít nhất theo ý kiến ​​của tôi, một plugin vim thiết yếu . Tính năng chính là tất cả các kết quả tìm kiếm được tô sáng trong thời gian thực, khi bạn đang gõ regex của mình. Ví dụ:

nhập mô tả hình ảnh ở đây

Tuy nhiên, một tính năng phụ cũng được cung cấp là tùy chọn bật và tắt ngay lập tức hlsearch khi bạn bắt đầu / ngừng tìm kiếm. Để kích hoạt tính năng này, bạn sẽ phải thêm

set hlsearch
let g:incsearch#auto_nohlsearch = 1
map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

để của bạn .vimrc.

Nếu bạn có bất kỳ nánh xạ nào khác , bạn sẽ phải tắt chúng đi. Ví dụ, tôi đã từng có

nnoremap n nzz
nnoremap N Nzz

Hai ánh xạ này không tương thích với nhau!


Vì bạn đang tự trả lời nên tôi muốn đề nghị bạn cũng thêm một vấn đề khác set hlsearch. Nếu bạn có nó được xác định trong vimrcnó sẽ ghi đè lên :nohmỗi khi bạn lấy nguồn vimrc. Để sắp xếp điều này tôi có if !&hlsearch | set hlsearch | endiftrong của tôi vimrc. (Và đây là một vấn đề khác mà plugin giải quyết được.)
Grochmal

Dunno, có vẻ như cả đống mã và cấu hình không thu được nhiều lợi ích cho tôi. Trong thực tế, nó làm cho mục tiêu tìm kiếm gia tăng của bạn khó phát hiện hơn, làm cho nó ít hữu ích hơn cho việc điều hướng nhanh.
Antony

+1 cho một câu hỏi trả lời plugin tuyệt vời và làm nhiều hơn nữa!
RichVel

7

vim-cool là một plugin đơn giản thực hiện điều này.

Vim-cool vô hiệu hóa đánh dấu tìm kiếm khi bạn hoàn thành tìm kiếm và bật lại khi bạn tìm kiếm lại.

Nó hoạt động mà không cần Remapping bởi sử dụng các CursorMovedInsertEnterautocommands.


Kỹ thuật này (sử dụng autocommands) tốt hơn câu trả lời của tôi và tôi không thể tin rằng tôi đã không nghĩ về nó khi tôi viết bài này. Upvote.
Giàu

5

Tôi sử dụng <Leader><Enter>như một phím tắt để :noh. (Thủ lĩnh của tôi là ,vậy, nó khá gần)

Điều này sẽ tắt những điểm nổi bật cho đến khi tìm kiếm tiếp theo của bạn.


3

Như bạn đã lưu ý trong câu trả lời của riêng mình , việc tắt tô sáng bằng :nohlsearchlệnh (có thể viết tắt là hiệu quả hơn nhiều :noh) thay vì tắt toàn bộ tính năng và sau đó bật lại vào lần tiếp theo bạn tìm kiếm.

Nếu bạn muốn tắt đánh dấu mỗi lần bạn sử dụng iđể vào chế độ chèn, bạn có thể tạo một ánh xạ đơn giản để làm như vậy:

:nnoremap i :noh<cr>i

Nó để lại như một bài tập cho người đọc để tạo ánh xạ tương tự cho các lệnh khác nơi họ muốn tô sáng bị tắt.


1

Nghe có vẻ ngu ngốc hoặc ngây thơ, nhưng những gì tôi làm khi tôi muốn dừng việc tô sáng là tôi tìm kiếm một chuỗi ngẫu nhiên mà (hầu như chắc chắn) không có trong tài liệu. Một cái gì đó như thế này:

/skljdfhadhfs

Cấp, nó mất một vài nét chính, nhưng chúng thực sự ngẫu nhiên, vì vậy chúng có thể được gõ ngay lập tức.


1
Nhưng điều này làm nNkhông còn hoạt động, và những thứ như :%s//somethinghoặc :g//something. Nó cũng làm
mờ

Có, nhưng giả định (có lẽ không chính xác) của tôi là vì bạn không cần làm nổi bật thêm nữa, bạn cũng không quan tâm đến tìm kiếm cụ thể đó. Làm lộn xộn lịch sử tìm kiếm là một vấn đề thực sự, nếu một người dựa vào nó.
Kostas

1

Tôi đã tìm thấy nó trực quan hơn để ánh xạ lại Ctrl- Lsơn lại để bao gồm :nohls:

nnoremap <C-L> :nohls<cr><C-L>

Chào mừng đến với Vi và Vim ! Cảm ơn bạn đã chia sẻ kiến ​​thức của bạn về những gì được thừa nhận là một câu hỏi cũ. Các câu trả lời chất lượng cao, như bạn có thể nhận thấy, thường đi kèm với một số giải thích về những gì mã đang làm (điều này đặc biệt hữu ích cho các vimmer mới hơn có thể hạ cánh ở đây mà không có nhiều kiến ​​thức). Nó cũng có thể là một ý tưởng tốt cho các :helpphần có liên quan !
D. Ben Knoble

0

Tôi sử dụng <Leader><Enter>như một lối tắt đến :hlsvà để người lãnh đạo của tôi đặt làm không gian.

let mapleader = "\<Space>"
nmap <silent> <leader><Esc> :set hls!<cr>

Sau khi tìm kiếm một mục sẽ được tô sáng, để tắt nó, nhấn <Space><Esc>. Và nếu bạn quyết định muốn hiển thị lại kết quả tìm kiếm, hãy nhấn <Space><Esc>. Có hls!nghĩa là ánh xạ khóa này ràng buộc để chuyển đổi cài đặt cho hls(viết tắt cho hlsearch, tức là tô sáng kết quả tìm kiếm) (để !bật tắt cài đặt ngay trước nó).


-1

Thêm macro này vào .vimrc của bạn

map #h :set hls!<CR>

Điều này sẽ cho phép bạn chuyển đổi chạng vạng với #h


Điều này không khác gì câu trả lời của James Affleck.
jamessan

Của tôi có vẻ súc tích hơn.
Darrel Lee

Tại sao sự đồng nhất có liên quan? Bài đăng khác cung cấp thêm thông tin về ý nghĩa của các phần của lệnh và bài đăng này không cung cấp thêm nội dung.
jamessan
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.