Vim: Bagaimana Anda menyoroti pola pencarian dari skrip?

0

Saya tidak akan berpikir bahwa ini akan sulit dilakukan, tetapi tidak berhasil. Yang saya coba lakukan adalah mengaktifkan sorot pencarian dari skrip. Saya sudah mencoba yang berikut ini:

function! g:TestFunc()
    let @/ ="testtext"
    set hlsearch
endfunction

nnoremap <space> :call g:TestFunc()<cr>

Yang tidak berhasil. Artinya, menekan spasi di depan beberapa teks dengan "testtext" di dalamnya tidak menyoroti teks. Pengguna masih harus menekan 'n'.

Saya juga mencoba menambahkan exec 'normal! n'ke akhir fungsi tetapi itu juga tidak berhasil. Bahkan feedkeys('n')gagal.

Steve Vermeulen
sumber

Jawaban:

4

Fungsi ini berfungsi seperti yang diharapkan jika hlsearchtidak disetel sebelum memanggilnya. Tampaknya pengaturannya dalam fungsi tidak berpengaruh jika sudah diatur. Anda dapat mengatasi ini dengan menetapkan nohlsearchdalam pemetaan Anda:

nnoremap <space> :set nohlsearch\|:call g:TestFunc()<cr>

Jika tujuan Anda hanya untuk menyoroti pola-pola tertentu, dan Anda tidak perlu menggunakan hlsearchmekanisme secara spesifik , Anda mungkin ingin melihat menggunakan matchperintah sebagai gantinya. Ini mencapai banyak hal yang sama lebih bersih.

Bradd Szonye
sumber
perintah pertandingan itu persis apa yang aku cari, tepuk tangan!
Steve Vermeulen
1

Anda tidak dapat mengatur pola pencarian yang terakhir digunakan dan menyoroti dari dalam suatu fungsi, lihat :help function-search-undo. Alih-alih, pindahkan :set hlsearchlangsung ke pemetaan Anda.

Ingo Karkat
sumber
0
function! wordsubstitute#run()
    execute "normal! gv\"ay"
    let @/ = @a
    "set nohlsearch
    let s:search_cmd = "normal! /".@/."/\<CR>"
    execute s:search_cmd."N"
    "set hlsearch
endfunction

Alih-alih menggunakan normal! nN, tulis nNdalam perintah pemetaan:

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN
Kehidupan
sumber