簡體   English   中英

Vim從腳本中搜索並突出顯示控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM