Untuk menghapus sorotan pencarian terakhir


1904

Setelah melakukan pencarian di Vim, saya mendapatkan semua kejadian yang disorot. Bagaimana saya bisa menonaktifkannya? Sekarang saya melakukan pencarian lain untuk sesuatu omong kosong yang tidak dapat ditemukan.

Apakah ada cara untuk menonaktifkan sementara highlight dan kemudian mengaktifkannya kembali saat diperlukan lagi?


197
Saya pikir solusi "nnoremap <esc>: noh <return> <esc>" adalah jawaban yang lebih lengkap untuk pertanyaan - dengan memasukkannya ke dalam .vimrc, Anda kemudian dapat menekan <esc> setelah Anda mencari untuk menghapus penyorotan. dari pencarian sebelumnya (tetapi tidak menonaktifkan penyorotan untuk selamanya).
Stewart Johnson

5
: set invhlsearch akan menonaktifkan penyorotan jika sudah disorot dan mengaktifkannya jika belum. Anda dapat memetakannya untuk mengatakan Shift-H.
puffadder

1
@StewartJohnson melakukan hal itu dalam file .vimrc saya tampaknya mengganggu / memutuskan: set mouse = a. Ada ide mengapa? Kesalahan ini hanya terjadi di iTerm2
Charlie Parker

20
@StewartJohnson Hati-hati! Komentar teratas Anda dengan pemetaan menyebabkan kesalahan dan perilaku tak terduga seperti yang dijelaskan dalam komentar di bawah ini ke stackoverflow.com/a/1037182/1698467
skywinder

3
The nnoremap <esc> :noh<return><esc>solusi yang disarankan oleh @StewartJohnson bekerja dengan baik di GUI vim, tetapi menyebabkan masalah dengan tombol panah dan tombol ESC-dikodekan lainnya ketika menjalankan vim dalam terminal. Jangan memasukkannya ke dalam Anda ~/.vimrc tanpa membungkusnya dalam if has('gui_running')... end.
jbyler

Jawaban:


1588

Untuk mematikan penyorotan hingga pencarian berikutnya:

:noh

Atau matikan penyorotan sepenuhnya:

set nohlsearch

Atau, untuk mengaktifkannya:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

14
Dengan melakukan set nohlsearch, highlight akan kembali ketika vim di-restart. :nohbekerja lebih baik.
Dharmit

21
itu menjengkelkan karena bisa sama cepatnya mencari string omong kosong: / oajf3w9 seperti mengetik: noh. Saya suka solusi @ avocade untuk memetakan kunci ruang ke: noh
nnyby

160
Ini tidak jelas dari jawaban dan komentar ini: catatan yang set nohlsearchakan menonaktifkan sorotan untuk pencarian berikutnya juga. Perilaku :nohini sangat berbeda: penyorotan akan secara otomatis diaktifkan kembali ketika Anda melakukan pencarian baru atau bahkan ketika Anda melakukan sesuatu yang berkaitan dengan pencarian saat ini (misalnya ketika Anda mengetik nuntuk pergi ke item berikutnya).
Skippy le Grand Gourou

10
Tidak ada penjelasan tentang apa yang sebenarnya dilakukan dan konsekuensinya. Terima kasih kepada @SkippyleGrandGourou karena telah menjelaskan sebagian.
Jason S

3
Untuk apa nilainya, saya memetakan ini untuk '\/'(atau apa pun Pemimpin Anda):map <Leader>/ :nohlsearch<CR>
brianmearns

689

Dari Dokumentasi VIM

Untuk menghapus pola pencarian yang terakhir digunakan:

:let @/ = ""

Ini tidak akan mengatur pola ke string kosong, karena itu akan cocok di mana-mana. Polanya benar-benar dihapus, seperti saat memulai Vim.


129
... yang akan menjadi solusi yang lebih baik untuk masalahnya seperti yang saya mengerti.
Shaun Bouckaert

8
Ini yang saya cari! Saya memilihnya, pertanyaannya sedikit kabur. Ini membuat saya berpikir inilah yang dia inginkan: "Saya sekarang melakukan pencarian lain untuk sesuatu omong kosong yang tidak dapat ditemukan". Karena itulah yang saya lakukan untuk menghapus pencarian, tetapi tidak menonaktifkannya sehingga pencarian berikutnya akan menyorot lagi.
claytron

50
Inilah yang saya pikir pertanyaannya adalah ... di sini adalah perintah yang saya buat untuk mempercepat penghapusan string pencarian (dan karena itu menghapus semua highlight): :command C let @/=""Menggunakan ini memungkinkan Anda mengetik :Cuntuk menghapus string pencarian ... sangat cepat dan tidak memengaruhi pencarian atau penyorotan di masa depan.
Jason

12
@ jcreamer898, lihat bantuan vim pada "register" ( :he registers). Vim memiliki beberapa register bawaan yang menyimpan teks, kadang-kadang untuk data yang disentak, kadang-kadang untuk pencarian terakhir, dll. Ketika Anda melakukan pencarian, vim menempatkan pola dalam register "/", yang Anda rujuk menggunakan @/. Anda juga dapat menetapkan nilai ke register menggunakan di @regname=valuemana regnameadalah nama register. Jadi, @/=""cukup atur register "/" ke string kosong (kecuali bahwa untuk "/" register vim akan menghapus pencarian terakhir jika mengandung string kosong).
Ben Davis

3
Tambahkan ini ke .vimrc Anda untuk mendapatkan Ctrl + / untuk menghapus pencarian terakhir: noremap <silent> <c-_> :let @/ = ""<CR>
angrydust

583

Anda dapat melakukan

:noh

atau :nohlsearchuntuk sementara menonaktifkan penyorotan pencarian sampai pencarian berikutnya.


3
terima kasih, ini membantu ... perintah apa pun untuk mengembalikan sorotan?
Gabriel Solomon

17
: nohs hanya menutup penyorotan saat ini. Jika Anda memiliki: set hlsearch maka itu akan terus menyorot pencarian Anda.
greyfade

6
Saya pikir inilah yang dicari OP (walaupun jawaban Shaun juga bekerja). Saya memilih ini karena lebih pendek. Saya tahu dia menerima jawaban nohls, tetapi mengaturnya akan menonaktifkan semua sorotan pencarian, bahkan jika pencarian lain dicoba setelahnya.
Thiago Arrais

5
Ini mungkin yang diinginkan OP di tempat pertama dan merupakan jawaban terpendek dan terbaik IMHO.

Kesempurnaan dapat dicapai bahkan di dunia fana ini! Saya akan menggunakan ini lebih dari: tolong, dan tidak ingin mencemari <esc>: nnoremap <F1>: noh <CR>
Sam Watkins

305

Saya menemukan jawaban ini bertahun-tahun yang lalu di vim.org:

Tambahkan berikut ini ke .vimrc Anda:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

Dengan demikian, setelah pencarian Anda, tekan kembali lagi dalam mode perintah, dan sorotan menghilang.


36
Saya pikir ini adalah solusi yang jauh lebih baik daripada yang sebenarnya telah diterima - baik ini atau yang lain di mana ia dipetakan ke <ESC>.
Stewart Johnson

20
Ini adalah jawaban yang jauh lebih baik untuk "nnoremap <esc>: noh <return> <esc>" karena tidak menyebabkan perilaku aneh.
Dennis

19
Satu hal penting yang perlu diperhatikan, pastikan Anda tidak memberikan komentar di sisi kanan remap. Mereka akan diartikan sebagai perintah untuk remap dan bukan komentar.
codybuell

13
Komentarnya salah; perintah tidak tidak diset pola pencarian terakhir tetapi hanya akan mematikan menyoroti hasil saat ini; Anda dapat menekan nuntuk menemukan kejadian berikutnya (yang akan disorot lagi). BTW, saat scripting, saya akan menghindari bentuk singkatan, dan bukannya menulis :nohlsearch.
Tobias

28
Tambahkan <silent> untuk menghindari tampilan yang berkedip dan meninggalkan noh di baris perintah -: nnoremap <silent> <CR>: nohlsearch <CR> <CR>
Peter N Lewis

137

Dari http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

Baris kedua diperlukan untuk pemetaan ke tombol escape karena Vim secara internal menggunakan escape untuk mewakili kunci-kunci khusus.


12
Supaya jelas, ini memungkinkan Anda menghapus sorotan pencarian dengan menekan tombol Escape
Gavin Miller

7
Untuk beberapa alasan, ini membuat vim terminal saya mulai seolah-olah "c" ditekan. Ada ide?
Jacob

31
Ini menyebabkan beberapa perilaku yang sangat aneh ketika saya mencobanya: saat startup, gerakan vim reguler (misalnya j, k) akan menyebabkan garis dihapus. nnoremap <CR>: noh <CR> <CR> tidak menyebabkan masalah ini. Saya tidak bisa melacak penyebab dasarnya.
oasisbob

9
hmm, saya punya masalah yang sama dengan yang di atas. Jangan gunakan apa adanya tanpa pengujian kecuali jika Anda suka menghapus teks Anda secara acak ...
Derek Litz

8
menggunakan "nnoremap <esc>: noh <return> <esc>" membuat vim selalu dimulai dalam mode "REPLACEMENT".
user1850133

38

Solusi asli saya (di bawah) kotor dan boros. Sekarang saya gunakan:noh

Seperti banyak fitur di Vim, cara yang tepat seringkali tidak mudah ditemukan.

-

(JANGAN LAKUKAN INI)

Cari urutan karakter yang tidak mungkin (tumbuk tombol pada baris beranda):

/;alskdjf;

Ini berfungsi dalam vim dan kurang, dan lebih mudah diingat / diketik daripada solusi logis ShaunBouckaert "untuk menghapus pola pencarian yang terakhir digunakan":

:let @/ = ""

Kelemahan potensial adalah menambahkan sampah ke riwayat pencarian Anda.


17
Tidak hanya ini solusi kotor (yang saya sendiri gunakan sampai sekarang, jangan tersinggung), kelemahan lain adalah menambahkan spanduk merah jelek bertuliskan "pola tidak ditemukan" di bagian bawah jendela, yang hampir sama menjengkelkannya dengan penyorotan. sendiri dan memerlukan tindakan lebih lanjut untuk dibuang (mis. "search + backspace").
Skippy le Grand Gourou

5
Ini juga bisa memakan waktu beberapa detik, karena sebenarnya mencari seluruh sisa file. Itu sangat menjengkelkan jika file tersebut besar. Tentu saja, Anda dapat menandai posisi Anda saat ini, melompat ke awal, dan mencari karakter di belakang, tetapi itu juga kotor.
Blacklight Shining

5
Ini adalah solusi yang sebagian besar akan digunakan sebelum belajar tentang :nohlperintah. Begitu saya mengetahui yang terakhir, saya langsung berhenti untuk melakukan pencarian itu.
Tobias

7
Ini bukan jawaban; itu hanya merekomendasikan untuk melakukan apa yang sudah dilakukan OP: "Saya sekarang melakukan pencarian lain untuk sesuatu omong kosong yang tidak dapat ditemukan."
Pasang kembali Monica - notmaynard

2
Jika Anda ingin pola yang sangat mudah dan gunakan saja /$4. Bukan hanya tidak mungkin cocok dengan apa pun, tetapi sebenarnya benar-benar MUNGKIN. $harus selalu diikuti oleh baris baru atau menjadi akhir file, dan 4 bukan baris baru atau akhir file. (Alasan untuk 4 secara khusus hanya karena itu pada kunci yang sama, jadi sangat mudah untuk mengetik dengan cepat)
titik koma

32

Dipetakan kembali dalam file .vimrc.local saya, cepat dan kotor tetapi sangat fungsional:

" Clear last search highlighting
map <Space> :noh<cr>

32
nnoremap <cr> :noh<CR><CR>:<backspace>

Dengan begitu saya menyingkirkan :nohditampilkan di commandline, ketika memukul entersetelah pencarian.

:seperti memulai memasukkan perintah baru, Backspacemengosongkannya, dan mengembalikan fokus ke jendela editor.


6
Terima kasih. ": Noh" yang muncul di kiri bawah membuatku gila, OCD sialan.
andrewtweber

Saya mencoba memetakannya ke shift cr dengan melakukan nnoremap <S-cr>: noh <CR> <CR> tetapi tidak berhasil, apakah Anda tahu mengapa itu tidak berfungsi?
Charlie Parker

Saya curiga Anda tidak dapat menggabungkan shift dengan return, tapi jujur ​​saya tidak tahu.
Sjas

@CharlieParker IIRC Anda hanya dapat menggunakan perubahan [a-z]dan karakter semacam itu.
sja

7
Alih-alih melakukan :<Backspace>, Anda bisa menambahkan <silent>setelah nnoremapmemberitahu Vim untuk tidak menampilkan output apapun di daerah perintah: nnoremap <silent> <cr> :noh<CR><CR>.
Soren Bjornstad

31

Jawaban yang mengusulkan :nohatau :nohlsearch(misalnya, Matt McMinn) benar untuk sementara menonaktifkan penyorotan pencarian - seperti yang ditanyakan dalam pertanyaan awal.

Saya pikir saya akan berkontribusi pemetaan yang saya temukan berguna dalam mode Normal:

nnoremap <C-L> :nohlsearch<CR><C-L>

Secara default, CtrlLdi Vim membersihkan dan menggambar ulang layar. Sejumlah program baris perintah (kebanyakan yang menggunakan pustaka GNU Readline , seperti Bash) menggunakan kombinasi tombol yang sama untuk menghapus layar. Fitur ini berguna dalam situasi di mana suatu proses yang berjalan di latar belakang dicetak ke terminal, bagian-bagian dari proses foreground yang ditulis secara berlebihan.

Pemetaan mode Normal ini juga menghapus penyorotan istilah pencarian terbaru sebelum menggambar ulang layar. Saya menemukan dua fitur saling melengkapi dan lebih mudah menggunakan satu CtrlLuntuk kedua tindakan bersama daripada membuat pemetaan terpisah untuk menonaktifkan sorotan pencarian.

NB: noremap digunakan daripada mapsebaliknya, pemetaan akan bersifat rekursif.

Tip: Saya biasanya remap Caps Lockuntuk Ctrluntuk membuatnya lebih mudah untuk mengetik kombinasi kunci seperti; rincian untuk melakukan ini tergantung pada pilihan OS / sistem windowing Anda (dan di luar topik untuk jawaban ini). Kedua tips berikut mencakup informasi tentang pemetaan Caps Lockke CtrlsertaEsc :


26

Saya biasanya memetakan :nohke tombol backslash. Untuk mengaktifkan kembali penyorotan, tekan saja n, dan itu akan menyoroti lagi.


24

Nonaktifkan sorotan pencarian secara permanen

Kecocokan tidak akan disorot setiap kali Anda melakukan pencarian menggunakan /

:set nohlsearch

Hapus highlight hingga pencarian berikutnya

:noh

atau :nohlsearch(kosong sampai natau Nditekan)


Hapus sorotan saat menekan ESC

nnoremap <esc> :noh<return><esc>

Hapus sorotan saat menekan tombol lain atau peta khusus

  • Hapus highlight pada penekanan \(garis miring terbalik)

    nnoremap \ :noh<return>
    
  • Hapus highlight saat memukul ESCdua kali

    nnoremap <esc><esc> :noh<return>
    

2
The nnoremap <silent> <esc> :noh<return><esc>solusi bekerja dengan baik di GUI vim, tapi menyebabkan masalah berat dengan tombol panah dan tombol ESC-dikodekan lainnya ketika menjalankan vim dalam terminal. Jangan memasukkannya ke dalam Anda ~/.vimrc tanpa membungkusnya dalam if has('gui_running')... end. Juga pertimbangkan untuk menambahkan <silent>yang menghindari mem-flash :nohperintah di bilah status.
jbyler

17

Inilah yang saya gunakan (diekstrak dari banyak pertanyaan / jawaban yang berbeda):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

Dengan "dobel" EscAnda menghapus sorotan, tetapi segera setelah Anda mencari lagi, sorotan muncul kembali.


Alternatif lain:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

Menurut dokumentasi vim:

clearmatches ()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

Saya menghadapi beberapa bug dalam solusi teratas, jadi untuk menghemat waktu Anda mencoba semua jawaban. Gunakan solusi ini! Edit Anda .vimrcdan masukkan entri berikut di dalamnya:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
ani627

Tapi begitulah katanya Oo. Mungkin Anda bisa cerewet?
Pablo Olmos de Aguilera C.

Saya mendukung solusi Anda ... Ini adalah IMO terbaik ... Dan saya juga telah memutarnya .. :)
ani627

1
Menghapus daftar pencarian @/=""memiliki efek samping dari membuat ntidak berfungsi untuk mendapatkan pencarian Anda kembali. Saya lebih suka :nohyang menyimpan pencarian sebelumnya di register untuk digunakan kembali.
jbyler

11

Untuk mematikan penyorotan hingga pencarian berikutnya

:noh

Ilustrasi Visual


10

Jika Anda menginstal plugin incsearch.vim , maka ada pengaturan untuk secara otomatis menghapus sorotan setelah pencarian:

let g:incsearch#auto_nohlsearch = 1

masukkan deskripsi gambar di sini


8

Janus untuk VIM dan GVIM memiliki sejumlah hal yang dipanggang untuk pemula seperti saya, termasuk

<leader>hs - toggles highlight search

itulah yang Anda butuhkan. Ketikkan saja \hsdalam mode normal. (Kunci pemimpin dipetakan ke\ secara default.)

HTH.



7

Nonaktifkan penyorotan segera setelah Anda memindahkan kursor:

Instal vim-cool . Itu dibuat untuk memperbaiki masalah khusus ini. Ini mematikan penyorotan segera setelah Anda memindahkan kursor. Berhati-hatilah, itu membutuhkan versi vim baru-baru ini!


6

Ini akan menghapus sorotan pencarian setelah updatetimemilidetik tidak aktif.

updatetimedefault ke 4000ms atau 4s tapi saya atur 10s. Penting untuk dicatat bahwa updatetimelakukan lebih dari ini, jadi bacalah dokumen sebelum Anda mengubahnya.

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END

6

Jika Anda ingin dapat mengaktifkan / menonaktifkan penyorotan dengan cepat , Anda dapat memetakan kunci untuk

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

Masukkan saja cuplikan di atas ke dalam file .vimrc Anda

Itu cara yang paling nyaman bagi saya untuk menunjukkan dan menyembunyikan sorotan pencarian dengan stroke kunci bernyanyi

Untuk informasi lebih lanjut, lihat dokumentasi http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches


5

Satu lagi solusi dengan menggabungkan 2 jawaban teratas:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

Menghapus daftar pencarian @/=""memiliki efek samping dari membuat ntidak berfungsi untuk mendapatkan pencarian Anda kembali. Saya lebih suka :nohyang menyimpan pencarian sebelumnya di register untuk digunakan kembali. Anda dapat mengikatnya <F3>dengannnoremap <F3> :noh<CR>
jbyler


4

Saya hanya menggunakan nohl sederhana di bawah ini dan tidak ada plugin yang diperlukan.

:nohl


4

Dugaan saya adalah bahwa pertanyaan awal yang bersangkutan tidak dinonaktifkan penyorotan pencarian tetapi hanya menghapus penyorotan dari pencarian terakhir. Solusi mencari string omong kosong, yang disebutkan oleh poster aslinya, adalah yang telah saya gunakan selama beberapa waktu untuk menghapus penyorotan dari pencarian sebelumnya, tapi jelek dan rumit.

Beberapa saran yang saya temukan untuk ditambahkan nnoremap ...ke ~ / .vimrc di sini memiliki efek menempatkan vim ke dalam mode ganti saat startup, yang sama sekali tidak seperti yang saya inginkan. Solusi paling sederhana yang saya temukan adalah menambahkan baris

nmap <esc><esc> :noh<return>

ke ~ / .vimrc saya. Ini mengacu pada prinsip KISS dan tidak mengganggu tombol panah, yang menggunakan <esc> tunggal. Sebuah double-<esc> diperlukan dalam mode perintah (atau triple-<esc> dari mode insert atau replace) untuk menghapus penyorotan dari pencarian sebelumnya, tetapi dari perspektif UI ini membuat operasi menjadi sesederhana mungkin.


Apa yang Anda maksud dengan <esc> tunggal yang mengganggu tombol panah?
hansmosh

1
@hansmosh Lihat unix.stackexchange.com/questions/28713/... Saya menggunakan dua baris di .vimrc sebagai berikut nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley

4

Saya menggunakan berikut ini di blog saya ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

Ini membuatnya sangat mudah dan cepat untuk menghapus pencarian yang disorot saat ini. Kunci pemimpin saya dipetakan \sehingga ini membuat tindakan sangat mudah dilakukan dengan jari dan ibu jari kelingking kanan saya.


3

Saya pikir mencampur @ShaunBouckaert dan 19 Maret 2009 di 16:22 jawaban adalah kompromi yang baik:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

Tekan Enterdan teks yang disorot tidak lagi disorot, sementara penyorotan pencarian masih diaktifkan.


3

Anda dapat menggunakan : noremap untuk menghidupkan / mematikan hasil pencarian, seperti ini

:noremap <F3> :set hls! hls?<CR>


3

Berdasarkan jawaban @ baruch-even, Anda dapat menghapus istilah pencarian dengan ESCdua kali tekan saat dalam mode normal dengan:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

Saya pikir mengikat kedua tidak apa-apa, tetapi yang pertama berbahaya. Memetakan kembali <esc>berfungsi dengan baik dalam GUI vim, tetapi menyebabkan masalah parah dengan tombol panah dan kunci yang dikodekan ESC lainnya saat menjalankan vim di terminal. Jangan memasukkannya ke dalam Anda ~/.vimrc tanpa membungkusnya dalam if has('gui_running')... end. Juga pertimbangkan untuk menambahkan <silent>yang menghindari mem-flash :nohperintah di bilah status.
jbyler

1

Saya juga tidak suka. Saya menemukan itu melelahkan untuk memasukkan :nohlsemua waktu ... jadi saya menempatkan pemetaan berikut di blog saya.vimrc

noremap <C-_> :nohl<cr>:<backspace>

Bit pertama ( :nohl<cr>) menghapus penyorotan; bit kedua ( :<backspace>) adalah trik untuk membersihkan baris perintah. Pencarian masih ada di latar belakang, jadi jika Anda menekan saja nitu akan menyorot kembali dan membawa Anda ke kejadian berikutnya.


1

Saya menambahkan ini ke vimrcfile saya .

command! H let @/=""

Setelah Anda melakukan pencarian dan ingin menghapus highlight dari pencarian Anda lakukan saja :H


1

Anda dapat menambahkan pemetaan pada file .vimrc Anda sebagai,

nmap <C-N>: nohlsearch

lalu Anda bisa menekan

Ctrl + N

ke kapan saja untuk menghapus teks yang disorot


Harap edit jawaban Anda untuk memastikannya meningkatkan jawaban lain yang sudah ada dalam pertanyaan ini.
hongsy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.