Menyoroti istilah pencarian tanpa menggerakkan kursor

15

Menggunakan Vim, saya kadang-kadang mendapati diri saya menatap bagian kode sumber untuk sementara waktu dan tiba-tiba ingin beberapa variabel di layar keluar. Itu mudah: /<var>yang menyoroti semuanya. Masalah saya adalah lebih sering daripada tidak pencarian menggeser jendela saya jadi saya tidak melihat kode sumber dari tempat yang sama. Bahkan jika itu hanya bergeser beberapa baris, itu masih membuatku kesal karena aku perlu mengambil beberapa detik untuk mencari tahu di mana hal-hal telah pindah ke.

Apakah mungkin untuk menyorot istilah pencarian tanpa memindahkan kursor ke kecocokan berikutnya?

Andrew Wood
sumber
2
Bukan jawaban yang tepat, tapi saya hanya menggunakan dua backticks (``) untuk melompat ke tempat saya sebelumnya.
Izkata

Jawaban:

1

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

Jika Anda menggunakan plugin ini, Anda cukup mengaktifkan fungsinya

\ m

lalu gunakan tombol NumPad untuk memberi warna pada kata itu ke mana-mana tanpa memindahkan kursor Anda.

1

Anda dapat menggunakan banyak highlight berbeda sekaligus untuk banyak kata yang berbeda, atau pola pencarian yang lebih kompleks jika diinginkan.

lessthanideal
sumber
Saya suka plugin ini!
Andrew Wood
15

jawaban skyblue menunjukkan inti gagasan tentang bagaimana menggunakan sorotan pencarian normal untuk mencapai apa yang Anda inginkan.

Saya memperluas teknik itu dengan membuat keybinding yang bekerja mirip dengan *perintah , tetapi tanpa benar-benar pindah ke pertandingan berikutnya.

Terima kasih saya kepada garyjohn karena menunjukkan expand()padanan *kata untuk pemilihan kata (untuk menghindari penggunaannya *sendiri dan mengembalikan tampilan). Ini menyederhanakan kode sehingga dapat langsung masuk dalam pemetaan (dihilangkan menggunakan fungsi). Saya juga telah menambahkan pemetaan yang cocok dengan sebagian kata (seperti 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>
Chris Johnsen
sumber
1
Anda dapat menghindari panggilan ke winaveview (), winrestview () dan normal *dengan mengganti let @/ = @/dengan let @/ = expand("<cword>").
garyjohn
@garyjohn: Ya, itu lebih baik. Saya tidak yakin ada sesuatu yang setara dengan seleksi "kata" yang dilakukan oleh *, tetapi <cword>apakah itu.
Chris Johnsen
13

Anda juga bisa mengatur register pencarian ke variabel yang ingin Anda cocokkan.

Pertama, pastikan sorot pencarian dihidupkan:

:set hlsearch

Kemudian, Anda dapat mengatur register pencarian dengan:

:let @/="variable"

Ini akan menyoroti semua kemunculan variabel tanpa melompat ke pertandingan berikutnya.

Untuk informasi lebih lanjut, lihat :help @/


sumber
7

Salah satu caranya adalah dengan menggunakan :matchperintah, misalnya,

:match Question '^R^W'

Itu akan menyorot kata di bawah kursor menggunakan grup Sorotan pertanyaan. Saya sering menggunakan grup Pertanyaan karena di terminal saya berwarna hijau. Untuk melihat grup sorotan yang tersedia, jalankan

:hi

Masing ^R-masing ^Wadalah Ctrl-R dan Ctrl-W, dan digantikan oleh kata di bawah kursor. Lihat

:help c_CTRL-R_CTRL-W

untuk lebih lanjut tentang itu. Lihat

:help :match

untuk lebih lanjut tentang :matchperintah. Untuk menghapus penyorotan itu, cukup jalankan

:match

tanpa argumen.

garyjohn
sumber
1

Sebagai tambahannya:

 :set hlsearch

Anda mungkin ingin:

 : set noincsearch
therube
sumber
0

Mirip dengan yang *kita miliki:

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

Perlu dicoba :h [I. disana kami menemukan beberapa hal menarik terkait dengan kebutuhan Anda.

Ada pertanyaan serupa tentang stackoverflow di mana saya meletakkan jawaban saya (sedikit lebih lengkap)

SergioAraujo
sumber