我试图让以下内容在函数内部工作。
let pat = 'set'
:execute "normal /" . pat . "\<CR>"
然而,当我像这样运行它时(字面意思是将粘贴复制到vim中)
:function! BSearch(pat)
execute "normal /" . a:pat . "\<CR>"
endfunction
:call BSearch('tag')
它搜索标签,但不进行任何突出显示。 “set”仍然会突出显示,如果我按n
,则会转到“设置”,而不是“标记”。
我在我的智慧结束 - 似乎在函数执行中只是表现不同。
如果您知道解决方法,请提供帮助。
我能够写出我的完整命令并让它像我预期的那样工作
command! -nargs=1 Ack2 execute "Ack " . <q-args> | execute "/".<q-args>
ack.vim
扩展程序未突出显示我搜索的字词。由于我已将搜索配置为使用perl正则表达式(并且ag
使用perl正则表达式,这是我用作搜索者的内容),现在这些术语不仅突出显示,我还可以使用{{1就像我任何正常的搜索一样(除了它现在显然在整个项目中)。
非常感谢!
答案 0 :(得分:1)
您不需要normal
到execute
/
次搜索。对于您的情况,这应该足够了:
function! BSearch(pat)
execute "/" . a:pat
endfunction
答案 1 :(得分:1)
看看这个:
:h function-search-undo
以下是整段:
The last used search pattern and the redo command "."
will not be changed by the function. This also
implies that the effect of |:nohlsearch| is undone
when the function returns.
也许您可以将搜索移动到用户命令中,例如:
command! -nargs=1 BSearch execute "/".<q-args>