这是在为 vim 编写脚本时弹出的。
使用有据可查的“:normal”命令:
:normal /abc
不搜索字符串 abc。相反,之前的搜索字符串仍然处于活动状态(即突出显示、使用 n 跳转到等)。
更奇怪的是:abc 显示为 / 历史中的最新模式(即点击 /,然后点击向上箭头)。
为什么 abc 没有成为真正的搜索模式?
确实有详细记录的
:normal
命令的帮助文件说明如下:
如果
未完成命令,则执行最后一个命令 将被中止,就像键入{commands}
或<Esc>
一样。<C-C>
当你写:,
:normal /abc
您尝试执行未完成的命令。事实上,在插入模式下输入“
/abc
”后,您还应该按“Enter”(即<CR>
)。这种情况不会发生,但是根据手册,按下了<Esc>
。
要通过命令搜索,您应该使用:.
:exec "/abc"
P Shved 是正确的,如果命令未完成,它将被中止。但你可以完成命令。您需要提供 Enter 键击,就像手动执行搜索一样。但是,仅按
Enter
键是行不通的,因为它将执行普通命令,而不是将其添加到您正在执行的命令中 with 正常。
使用
Ctrl-V Enter
将文字 Enter 添加到命令中(显示为 ^M
。请参阅 :h i_CTRL-V
)。您不能像使用映射一样使用 <Enter>
或 <CR>
。
:normal /abc^M
这将执行搜索,如果您在搜索后向正常命令添加更多内容,则从搜索匹配处开始执行命令的其余部分。
这样做可能无法获得所需的结果,因为搜索会找到当前行之外的示例。例如,假设您在视觉模式下选择了下面文本的前 3 行。
example text " <--- Visual Selection
sample text " <---
more words " <---
text test
执行以下命令将删除第 1、2 和 4 行上的单词
text
,即使在可视模式下未选择 4。
:'<,'>norm /text^Mdw
要仅影响范围内的行,您需要将搜索限制为当前行,请使用以下命令(请参阅
:h \%l
):
:'<,'>norm /\%.ltext^Mdw
这会限制搜索光标所在行,并且只会删除上例中前两行的
text
。