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

为什么vim在函数中的行为不同?,vim,vim-plugin,Vim,Vim Plugin,我试图让下面的内容在函数中工作 let pat = 'set' :execute "normal /" . pat . "\<CR>" let pat='set' :执行“正常/”。拍打"\" 但是,当我这样运行它时(字面上是将粘贴复制到vim中) :函数!B研究(pat) 执行“正常/”。a:帕特。"\" 端功能 :调用b搜索('tag') 它搜索标记,但不进行任何突出显示。“设置”仍然突出显示,如果我按n,它将转到“设置”,而不是“标记” 我束手无策——似乎函数execut

我试图让下面的内容在函数中工作

let pat = 'set'
:execute "normal /" . pat . "\<CR>"
let pat='set'
:执行“正常/”。拍打"\"
但是,当我这样运行它时(字面上是将粘贴复制到vim中)

:函数!B研究(pat)
执行“正常/”。a:帕特。"\"
端功能
:调用b搜索('tag')
它搜索标记,但不进行任何突出显示。“设置”仍然突出显示,如果我按
n
,它将转到“设置”,而不是“标记”

我束手无策——似乎函数execute内部的行为有所不同

如果您知道解决方法,请提供帮助

很好的解决办法 我能够写出我的全部命令,并让它按照我的预期工作

命令-nargs=1 Ack2执行“Ack”执行“/”

扩展名
ack.vim
没有突出显示我搜索的术语。由于我已经将搜索配置为使用perl正则表达式(而
ag
使用perl正则表达式,这是我作为搜索者使用的),现在不仅突出显示了这些术语,我还可以使用
n
像任何普通搜索一样逐步浏览它们(显然,现在整个项目中都有)


非常感谢

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

function! BSearch(pat)
  execute "/" . a:pat
endfunction
看看这个:

: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>
命令-nargs=1 b搜索执行“/”。

嗯,这很有趣。不幸的是,它在命令模式和函数中的行为仍然不同:((其行为与以前相同)更新的示例包含了完整的函数,在这里可以使用。这对我来说也不适用。两个版本之间的区别是,如果没有
normal
,列将很好地移动到匹配项,而使用它,列只移动到匹配行的开头。但它们都不会更改突出显示。这非常有效!我将发布我现在使用的是完全光荣的命令。
command! -nargs=1 BSearch execute "/".<q-args>