
考虑文件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