关于 normal!,incsearch和/ operator(search)的一些微问题。我在这里没有解决任何特殊的问题,只是试图理解所提到的关系,所以我可以在脑海中进行某种类比。
如果我有,设置incsearch ,在正常模式下按 / something Vim将跳转到某事的第一个实例在我没有按下回车之前。
哦,所以正常! /某事应该做同样的事情。 为什么不呢?
同样, normal!无法识别特殊字符。因此,如果我有一个包含此文本的文本文件,
something<cr>
(那里不是特殊字符,但字面上输入文字)
`normal! /something<cr>`
应该让我接受那个文字。 为什么不呢?
我喜欢它,但有时候Vim的不一致是温和的,最有趣的是:)
答案 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
中止它。
由于您已使用vimscript标记了此问题,因此我猜您至少有一部分兴趣是在脚本中使用此问题。让文字回车进入脚本并使其正常工作是一种痛苦。在这些情况下,我会使用execute
,如上所示,因此您可以使用双引号解释字符串方法来获取回车。
至于incsearch
,它不会产生影响,因为我们无法像{1}}那样部分搜索,正如我们所见。您只能提交整个搜索。但是,它会更新最新的搜索注册normal
,因此突出显示仍会正确更新。