如何在VIM中打开文件并将光标移动到搜索结果

如何在VIM中打开文件并将光标移动到搜索结果

考虑文件tmp.txt的内容是:

x
abcd

我想在VIM中打开它并将光标移动到该c字符。所以我用以下参数运行 VIM:

$ vim -c "/c" tmp.txt

但它会将光标设置在 上a。看起来 VIM 能够找到c但将光标放在行首。为什么/c在文件打开时以 VIM 正常模式执行它的工作效果不同?

答案1

-s您可以使用(脚本)选项将光标定位在第一个匹配项上。根据vim手册:

-s {脚本}
脚本文件{脚本}已读。文件中的字符将被解释为就像您已键入它们一样。使用命令“也可以完成同样的操作”:source! {脚本}"。如果在编辑器退出之前到达文件末尾,则会从键盘读取更多字符。

您可以使用带有击键的临时文件,甚至(如果您正在使用bash)进程替换。例如:

#!/bin/bash
vim -s <(printf '/c\n') tmp.txt

这种方法适用于比单个字符更复杂的搜索。

答案2

第一次尝试

我考虑使用+/命令选项,该选项在手册页中记录为

+/{pat}– 对于第一个文件,光标将定位在第一次出现{pat}.

但是,手册页中的描述具有误导性,即光标实际上放在包含搜索模式的第一行的第一个字符上,类似于使用基于行的ex命令时搜索的工作方式。

更新:从 Vim 8.1 开始,其手册页已更新以反映此选项的实际行为:

对于第一个文件,光标将定位在第一次出现的行中{pat}


工作溶液

更好的解决方案是使用-c选项 with :execute(必需的,以便\n可以用于将换行符传递给:normal命令)来执行搜索,就像您已经在正常模式下打开 Vim 一样。

一般解决方案:

vim -c 'execute "normal /pattern\n"' filename

上例的解决方案:

vim -c 'exe "norm /c\n"' tmp.txt

相关内容