为什么vim在函数内的行为不同?

时间:2015-09-17 19:00:29

标签: vim vim-plugin

我试图让以下内容在函数内部工作。

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就像我任何正常的搜索一样(除了它现在显然在整个项目中)。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您不需要normalexecute /次搜索。对于您的情况,这应该足够了:

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>