Bagaimana saya bisa menyorot semua kemunculan kata yang dipilih di GVim, seperti di Notepad ++?
Bagaimana saya bisa menyorot semua kemunculan kata yang dipilih di GVim, seperti di Notepad ++?
Jawaban:
Dalam mode Normal:
:set hlsearch
Kemudian cari pola dengan perintah /
dalam mode Normal, atau <Ctrl>o
diikuti oleh /
dalam mode Sisipkan. *
dalam mode Normal akan mencari kemunculan kata berikutnya di bawah kursor. The hlsearch
pilihan akan menyoroti semua dari mereka jika ditetapkan. #
akan mencari kemunculan kata sebelumnya.
Untuk menghapus highlight dari pencarian sebelumnya:
:nohlsearch
Anda mungkin ingin memetakan :nohlsearch<CR>
ke beberapa tombol yang mudah.
*
atau #
oleh <Ctrl>o
dalam mode normal.
:nohlsearch
, Anda bisa menggunakan:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
untuk beralih di antara highlight dan menghapus highlight oleh <F4>
.
The *
key akan menyoroti semua kejadian dari kata yang berada di bawah kursor.
&hlsearch
aktif.
#
.
Saya tahu daripada pertanyaan yang sangat lama, tetapi jika seseorang tertarik pada fitur ini, dapat memeriksa kode ini http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle
" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
let @/ = ''
if exists('#auto_highlight')
au! auto_highlight
augroup! auto_highlight
setl updatetime=4000
echo 'Highlight current word: off'
return 0
else
augroup auto_highlight
au!
au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
augroup end
setl updatetime=500
echo 'Highlight current word: ON'
return 1
endif
endfunction
cara paling sederhana, ketik mode normal *
Saya juga punya pemetaan ini untuk mengaktifkan dan menonaktifkan
"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv
Pilih kata dengan mengkliknya
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Bonus: Fungsi CountWord
fun! CountWordFunction()
try
let l:win_view = winsaveview()
let l:old_query = getreg('/')
let var = expand("<cword>")
exec "%s/" . var . "//gn"
finally
call winrestview(l:win_view)
call setreg('/', l:old_query)
endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>
Memilih kata dengan mouse dan menghitung kejadian sekaligus: OBS: Perhatikan bahwa dalam versi ini kita memiliki perintah "CountWord" di akhir
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
dannnoremap # #``cgN
*
, bagaimana cara mematikan penyorotan?
:noh
atau:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
dan nnoremap <silent> # :execute "normal! #n"<cr>
? Ini hanya menyoroti kata di bawah kursor tetapi tidak memindahkannya ke kejadian berikutnya.
Solusi berbasis pencarian ( *, /...) memindahkan kursor, yang mungkin disayangkan.
Alternatifnya adalah menggunakan plugin mark.vim yang disempurnakan , kemudian selesaikan Anda .vimrc
untuk membiarkan sorotan pemicu klik dua kali (saya tidak tahu bagaimana pilihan keyboard dapat memicu perintah):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Ini memungkinkan beberapa penyorotan, ketekunan, dll.
Untuk menghapus penyorotan, baik:
:Mark
(matikan hingga pilihan berikutnya):MarkClear
:set noincsearch
. Menurut pendapat saya itu adalah salah satu fitur yang paling menyebalkan di Vim dan salah satu hal pertama yang saya nonaktifkan untuk pemasangan baru.
*
akan memindahkan kursor tanpa syarat. Dan saya tidak bisa melihat bagaimana incsearch
mungkin menjengkelkan, karena itu hanya 'melihat ke depan', melakukan pencarian saat ini tanpa benar-benar mengubah posisi Anda.
incsearch
akan mencegah gerakan, tetapi tes cepat mengkonfirmasi Anda benar. Permintaan maaf saya. Namun, itu super mudah untuk membuat pemetaan yang mencegah gerakan: :nnoremap * *N
. Saya tidak percaya Anda tidak merasa terganggu karena kursor Anda melompati layar saat Anda melakukan pencarian. Tapi ... hal-hal ini sepenuhnya subjektif. Vive la différence ;-)
:let @/='hilight_this'
, dengan asumsi Anda telah hlsearch
mengaktifkan. Ini menyoroti teks tanpa melompat, dan Anda tidak perlu mengubah pengaturan yang ada. Ini mengubah nilai yang saat ini disimpan dalam register pencarian.
Pertama (atau di .vimrc Anda):
:set hlsearch
Lalu posisikan kursor Anda di atas kata yang ingin Anda sorot, dan tekan *
.
hlsearch
berarti menyorot semua kemunculan pencarian saat ini, dan *
berarti mencari kata di bawah kursor.
Pertama pastikan bahwa hlsearch diaktifkan dengan mengeluarkan perintah berikut
:set hlsearch
Anda juga dapat menambahkan ini ke file .vimrc Anda sebagaimana diatur
set hlsearch
sekarang ketika Anda menggunakan mekanisme pencarian cepat dalam mode perintah atau perintah pencarian biasa, semua hasil akan disorot. Untuk bergerak maju di antara hasil, tekan 'n' untuk bergerak mundur tekan 'N'
Dalam mode normal, untuk melakukan pencarian cepat untuk kata di bawah kursor dan untuk beralih ke kejadian berikutnya dalam satu perintah tekan '*', Anda juga dapat mencari kata di bawah kursor dan pindah ke kejadian sebelumnya dengan menekan '# '
Dalam mode normal, pencarian cepat juga dapat dipanggil dengan
/searchterm<Enter>
untuk menghapus highlight pada penggunaan ocuurences, saya telah mengikat ini ke shortcut di .vimrc saya
:nohl
Aktifkan penyorotan pencarian:
:set hlsearch
Kemudian cari kata:
/word<Enter>
Favorit saya untuk melakukan ini adalah plugin mark.vim . Memungkinkan untuk menyorot beberapa kata dalam berbagai warna secara bersamaan.
untuk menyorot kata tanpa memindahkan kursor, plop
" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>
ke dalam vimrc Anda.
Apa yang baik tentang ini g*
dan g#
masih akan bekerja seperti "normal" *
dan #
.
Untuk mengatur hlsearch
off, Anda dapat menggunakan "short-bentuk" (kecuali jika Anda memiliki fungsi lain yang dimulai dengan "noh" dalam mode perintah): :noh
. Atau Anda dapat menggunakan versi panjang::nohlsearch
Untuk kenyamanan yang ekstrem (saya menemukan diri saya beralih hlsearch
mungkin 20 kali per hari), Anda dapat memetakan sesuatu untuk beralih hlsearch
seperti:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. jika Anda <leader>
adalah \(secara default), Anda dapat menekan \st(cepat) dalam yang normal mode untuk beralih hlsearch
.
Atau mungkin Anda hanya ingin :noh
memetakan:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Di atas hanya berjalan :nohlsearch
begitu (tidak seperti :set hlsearch!
) itu masih akan menyorot kata lain kali Anda menekan *atau #dalam mode normal .
Bersulang
Menggunakan autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Pastikan Anda telah IncSearch
menetapkan sesuatu. mis call s:Attr('IncSearch', 'reverse')
. Atau Anda dapat menggunakan grup sorotan lain sebagai gantinya.
Ini akan menyoroti semua kemunculan kata di bawah kursor Anda tanpa penundaan. Saya menemukan bahwa penundaan memperlambat saya ketika saya memeriksa kode. Warna highlight akan cocok dengan warna kata, sehingga tetap konsisten dengan skema Anda.
Mengapa tidak adil: z /
Itu akan menyoroti kata saat ini di bawah kursor dan kejadian lainnya. Dan Anda tidak harus memberikan perintah terpisah untuk setiap item yang Anda cari. Mungkin itu tidak tersedia di gvim yang tidak suci? Secara default vim sudah dalam vim.
* hanya baik jika Anda ingin kursor pindah ke kejadian berikutnya. Saat membandingkan dua hal secara visual, Anda seringkali tidak ingin kursor bergerak, dan sangat menjengkelkan untuk menekan tombol * setiap kali.
~/.vimrc
file Anda
" highlight the searched items
set hlsearch
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
:so%
Dalam model normal pergi ke kata.
Tekan * Tekan F8 untuk mencari secara rekursif di bawah seluruh proyek Anda di atas kata
Misalnya plugIns ini:
Cukup cari di bawah kursor di vimawesome.com
Kuncinya, seperti yang disebutkan clagccs , adalah bahwa sorot TIDAK bertentangan dengan pencarian Anda : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Tangkapan layar tentang bagaimana BUKAN bertentangan dengan pencarian: Catatan:
hlsearch
banyak Anda mungkin ingin untuk memetakan:set hlsearch!
bukan:set nohlsearch
. Ini mengubah pengaturan daripada selalu mematikannya.