怎么做:正常! / something <cr>与incsearch和/ operator?</cr>有关

时间:2011-12-01 02:24:20

标签: vim

关于 normal!,incsearch和/ operator(search)的一些微问题。我在这里没有解决任何特殊的问题,只是试图理解所提到的关系,所以我可以在脑海中进行某种类比。

如果我有,设置incsearch ,在正常模式下按 / something Vim将跳转到某事的第一个实例在我没有按下回车之前。

哦,所以正常! /某事应该做同样的事情。 为什么不呢?

同样, normal!无法识别特殊字符。因此,如果我有一个包含此文本的文本文件,

something<cr>

(那里不是特殊字符,但字面上输入文字)

`normal! /something<cr>`

应该让我接受那个文字。 为什么不呢?

我喜欢它,但有时候Vim的不一致是温和的,最有趣的是:)

1 个答案:

答案 0 :(得分:4)

:help :normal中,相关文字为:

{commands} should be a complete command.  If
{commands} does not finish a command, the last one
will be aborted as if <Esc> or <C-C> was typed.

您为normal提供的命令字符串必须是完整的命令,否则它将中止。但是,normal! /something并不完整;如果你输入它,Vim会等你完成。您可以按 Esc Ctrl - C 中止。或者您可以通过按 Enter 来完成它。所以命令没有完成,它会中止,而不是跳跃。要完成它,请输入它想要的输入(在命令行中):

:normal! /something^M

您可以通过键入 Ctrl - V 然后 Enter 来获取^M。 (如果在Windows上并且 Ctrl - V 粘贴,请使用 Ctrl - Q 。)然后你就可以了需要再次按 Enter 才能完成整个命令。如果您使用execute,则可以使用:

:execute "normal! /something\<cr>"

请务必使用双引号,以便正确解释\<cr>

我相信你的第二个问题是一回事。字面上键入的<cr>不会影响这种情况,您只需提供将完成搜索命令的回车符,或normal中止它。

由于您已使用标记了此问题,因此我猜您至少有一部分兴趣是在脚本中使用此问题。让文字回车进入脚本并使其正常工作是一种痛苦。在这些情况下,我会使用execute,如上所示,因此您可以使用双引号解释字符串方法来获取回车。

至于incsearch,它不会产生影响,因为我们无法像{1}}那样部分搜索,正如我们所见。您只能提交整个搜索。但是,它会更新最新的搜索注册normal,因此突出显示仍会正确更新。