เป็นกลุ่ม: คุณเน้นรูปแบบการค้นหาจากสคริปต์ได้อย่างไร


0

ฉันจะไม่คิดว่ามันจะยากที่จะทำ แต่มันไม่ทำงาน สิ่งที่ฉันพยายามทำคือเปิดใช้งานไฮไลต์การค้นหาจากสคริปต์ ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:

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

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

ซึ่งไม่ได้ผล นั่นคือการกดปุ่มพื้นที่ด้านหน้าของข้อความด้วย "testtext" ในนั้นจะไม่เน้นข้อความ ผู้ใช้ยังคงต้องกดปุ่ม 'n'

ฉันลองเพิ่มexec 'normal! n'ในตอนท้ายของฟังก์ชั่น แต่ก็ไม่ได้ผล แม้feedkeys('n')ล้มเหลว

คำตอบ:


4

ฟังก์ชั่นใช้งานได้ตามที่คาดไว้หากhlsearchไม่ได้รับการตั้งค่าก่อนที่จะเรียกใช้ ปรากฏว่าการตั้งค่าในฟังก์ชั่นไม่มีผลหากตั้งค่าไว้แล้ว คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการตั้งค่าnohlsearchในการทำแผนที่ของคุณ:

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

หากเป้าหมายของคุณคือเน้นรูปแบบบางอย่างและคุณไม่จำเป็นต้องใช้hlsearchกลไกโดยเฉพาะคุณอาจต้องการใช้matchคำสั่งแทน มันประสบความสำเร็จในสิ่งเดียวกันมากขึ้นอย่างเรียบร้อย


คำสั่งการจับคู่นั้นเป็นสิ่งที่ฉันกำลังมองหาไชโย!
Steve Vermeulen

1

:help function-search-undoคุณไม่สามารถกำหนดรูปแบบการค้นหาที่ใช้แล้วและไฮไลท์จากภายในฟังก์ชั่นให้ดู ให้ย้ายไปยัง:set hlsearchการแมปของคุณโดยตรง


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

แทนที่จะใช้normal! nNให้เขียนnNคำสั่งการแม็พ:

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.