Bagaimana saya bisa menghapus penyorotan kata dalam dokumen saat ini (mis. Seperti setelah mencari kata)?


61

Ketika Anda mencari kata dalam file dengan sesuatu seperti /console.log, semua contoh console.logdisorot.

Saat Anda tidak lagi tertarik dengan hal ini, penyorotan bisa mengganggu. Strategi saya saat ini untuk menghapus sorotan adalah melakukan sesuatu seperti /asntehua. Apakah ada cara yang tepat untuk menghapus penyorotan kata ini?


2
Tidak ada yang lebih cepat daripada mengetik /skldafjlksjdf;)
Shahbaz

2
Tambahkan baris berikut ke vimrc Anda: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Tekan kembali dalam mode perintah, dan sorotan menghilang.
nilon

Jawaban:


47

Sebagai alternatif :noh, saya suka :let @/=""memetakan ke jalan pintas keyboard.

Perbedaannya adalah bahwa :nohmeninggalkan istilah pencarian dalam register pencarian, jadi ndan Ndalam mode normal melanjutkan pencarian dengan melompat ke pertandingan berikutnya / sebelumnya dan menyoroti kembali. Menggunakan :let @/="", di sisi lain, menyebabkan pesan E25: No previous regular expressiondan meninggalkan kursor di mana itu , yang terutama nyaman jika Anda belum tahu tentang ctrl- obelum dan sengaja memukul n.

Ini juga bisa digunakan dengan cara lain. Untuk menyebabkan vim menyorot beberapa teks tanpa melompat ke sana, Anda bisa:let @/="some text"

Dalam ekspresi ini, @ memungkinkan Anda merujuk ke register, dan @ / adalah register yang memegang pola pencarian terakhir.


31

Cukup ketik

:noh<cr>

(Dimana <cr>melambangkan carriage return, yaitu Enter.) Versi lengkap dari perintah ini adalah :nohlsearch.

Untuk kenyamanan, Anda dapat memiliki pemetaan seperti

nnoremap <Leader><space> :noh<cr>

di Anda .vimrc. Karena pemimpin saya adalah Space, ini memungkinkan saya untuk menghapus sorotan hanya dengan mengetuk spasi dua kali. (Secara default, <Leader>diatur ke \)

Opsi populer lainnya adalah untuk mengikatnya ke Ctrl+ L, karena ini kurang lebih merupakan default untuk 'layar terminal digambar ulang', yang kira-kira sama dengan apa yang Anda lakukan:

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

Ini memiliki efek samping juga menggambar ulang layar terminal, yang mungkin lambat jika koneksi terminal Anda lambat (yang sangat jarang hari ini).
CATATAN: Jika Anda menggunakan tpope / vim-sensible maka sudah menawarkan <C-l>pemetaan yang tercantum di atas.


21

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 atau pencarian baru dilakukan)


Hapus sorotan saat menekan ESC

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

Hapus sorotan saat menekan tombol lain atau peta khusus

  • Hapus highlight saat menekan \(garis miring terbalik)

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

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

Saya menambahkan nnoremap <esc> :noh<return><esc>ke saya vimrctetapi tidak berfungsi. Saya telah jkmemetakan untuk melarikan diri, mungkinkah itu sebabnya?
mbigras

Apa yang sebenarnya terjadi? Mungkin Anda menonaktifkan ESCkunci?
Sheharyar

menekan jktidak mematikan teks yang disorot (tetapi masih berfungsi sebagai Esc). Menekan Esctombol saya di kiri atas keyboard tidak akan mematikan teks yang disorot.
mbigras

Jadi, Anda punya jawaban di sana. Letakkan jkpeta Anda di bawah ESCpeta dan pastikan Anda menggunakan yang sederhana mapalih-alihnoremap
Sheharyar

Memetakan kembali escape dapat menyebabkan masalah dengan tombol panah, dan saya mengasumsikan skenario lain yang menggunakan kode escape. vi.stackexchange.com/questions/11144/…
Rob Mosher

2

Setelah mencoba beberapa solusi yang disarankan untuk pintasan untuk ini di ~ / vimrc, saya memutuskan untuk menambahkannya nmap <esc><esc> :noh<return>. Escape ganda mencegah gangguan dengan fungsi tombol panah. Jika Anda dalam mode sisipkan, triple escape diperlukan. Ini cepat untuk dieksekusi dan mudah diingat.


2

Saya menambahkan autocmd ke .vimrc saya yang menghilangkan sorotan kapan saja Anda masuk ke mode insert.

 autocmd InsertEnter * :let @/=""

2
Menggunakan nohlalih-alih let @/=""akan menjadi pendekatan yang lebih baik, karena Anda tidak akan mengganggu pencarian Anda saat ini.
jamessan

@ jamessan itu bekerja dengan :let @/=""perintah tetapi autocmd InsertEnter * :nohtidak karena suatu alasan, tahu mengapa?
tobek

1
Sebenarnya saya menemukan alasannya: menurut dokumen, 'Penandaan pencarian tidak dapat dimatikan dengan ": nohlsearch" dalam autocommand' - detail alasannya: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek

1

Jika Anda tidak ingin menyorot setelah pencarian apa pun, Anda dapat menggunakan ini (lebih baik):

:set nohls

atau ini (lebih buruk):

:hi Search NONE

1

Ketika saya mengetik :help incsearch, saya menemukan yang berikut ini di manual:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

yang saya mengundurkan diri untuk digunakan karena solusi lain yang saya coba tidak sempurna dan solusi ini datang "langsung dari mulut kuda", sehingga untuk berbicara. Ini menyoroti semua kecocokan pencarian di jendela saat ini.


1
/asdfasdf

Ini memiliki keuntungan bahwa Anda tidak harus mengetiknya exaclty. Kerugiannya adalah, ada kemungkinan sekitar 1: 68719476736 dalam file 4096 byte yang ini tidak berfungsi dan kursor Anda akan melompat ke tempat yang berbeda. Peluang ini meningkat untuk file yang lebih besar.


1
Selamat datang di vi SE! Saya pikir string asdfasdfitu spesial dalam arti bahwa itu sering terjadi pada file praktis, daripada urutan 8 byte yang dipilih secara acak. Dengan demikian, peluangnya jauh lebih tinggi. :-)
user259412

0

Saya tidak berpikir menghapus hls sama sekali akan menjadi hal yang baik, bagaimana dengan membuat mudah untuk mengaktifkan atau menonaktifkan membuat pintasan mudah (boolean) Dalam kasus saya ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

Keajaiban terjadi karena " !" di akhir pengaturan


0

Saya menemukan bahwa sangat jarang bagi saya untuk ingin menyoroti sama sekali dan ketika saya perlu menyoroti itu hanya untuk sesaat. Solusi saya adalah

nnoremap <Leader>/ set hls!<CR>

Ini memungkinkan penyorotan ketika Anda menekan \/dan menonaktifkannya lagi jika Anda menekan lagi. Ini memberikan akses mudah untuk menyoroti dalam kasus yang jarang terjadi saat Anda membutuhkannya.

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.