[英]Vim search and highlighting control from a script
我正在編寫一個腳本,我想以編程方式控制搜索,並突出顯示它們。 search()函數結果沒有突出顯示(我認為),所以使用該函數對我沒用。
我想要做的是使用'normal /'命令來搜索變量,但這似乎並不簡單。 我可以編寫命令腳本:
execute 'normal /' . my_variable . '\<CR>'
(或vim提示中建議的其他變體: http : //vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching )
但它沒有做任何事情。 執行腳本行后,我可以在命令行中看到正確的搜索項,但焦點位於文檔中,搜索寄存器未被更改,並且光標未進行任何搜索。 (似乎<CR>沒有進入,雖然沒有拋出錯誤 - 是的,我也試過使用文字^ M。)
我這樣做至少可以控制搜索寄存器:
execute 'let @/ ="' . a:term .'"'
然后顯而易見的事情似乎是:
normal n
但是,如果我在腳本中運行它,那么'正常n'不會做任何事情。 設置搜索寄存器確實有效,如果我在腳本終止后手動按'n'進行搜索(並且出現高亮顯示,因為hlsearch已打開)。 我甚至不關心光標是否定位,我只想突出顯示寄存器模式。 但是腳本中'set hlsearch'的各種組合也不起作用。
我知道我可以使用'match()',但我想讓它與常規搜索突出顯示,我想知道我做錯了什么。 它必須是簡單的東西,但我沒有看到它。 謝謝你的幫助。
跑:
讓@ / = a:searchStr
從你的函數內部運行
正常的
從你的功能之外(在它內部什么都不做)例如。
命令-nargs = * Hs調用MySearch()| 正常的
或者您可以使用:
設置hlsearch
如果你不想讓光標移動,而不是正常的n
(如果沒有函數之外的東西,我無法想出另一種方法。)
如果您的腳本使用的是函數,那么引用來自:help function-search-undo
是相關的:
最后使用的搜索模式和重做命令“。” 不會被功能改變。 這也意味着當函數返回時,nohlsearch的效果被撤消。
當函數結束時,Vim通常會嘗試重置搜索模式(以及其他一些東西),通常可以通過將n
(下一個搜索)添加到映射的末尾,或使用:map <expr>
並具有你的函數返回要執行的鍵序列。
仔細觀察,似乎\\<CR>
沒有在單引號內拾取。 請嘗試使用此代碼:
execute 'normal /' . my_variable . "\<CR>"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.