如何在特定的行和列处打开文件?

时间:2019-05-25 03:44:49

标签: bash perl vim exec

我正在开发一个模块,该模块需要在vim中的任意行和列处打开文件。我正在通过exec()进行此操作,但是vim没有获得正确的行和列:

如果我把它简化成单线的话:

perl -E "exec(q{vim}, q{+'call cursor(1,3)'}, q{README.md})"

此错误:

"README.md" 116L, 3790C
Error detected while processing command line:
E20: Mark not set
Press ENTER or type command to continue

vim显示此错误时,ps显示vim +'call cursor(1,3)' README.md,这是我想要的命令。实际上,将vim +'call cursor(1,3)' README.md复制/粘贴到新的终端窗口中可以使我获得所需的行为。

在我看来,vim认为通过Perl的exec()运行命令时,该行是116而不是1,并且该列是3790而不是3。

这是Perl 5.26.1,Vim 8.1和GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin18)。

1 个答案:

答案 0 :(得分:6)

bash命令

vim +'call cursor(1,3)' README.md

没什么不同
vim '+call cursor(1,3)' README.md

使用以下参数同时启动vim

0:vim
1:+call cursor(1,3)
2:README.md

但是,您指示Perl将以下args传递给vim

0:vim
1:+'call cursor(1,3)'
2:README.md

该shell命令的Perl等同于

exec('vim', '+call cursor(1,3)', 'README.md')