我正在开发一个模块,该模块需要在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)。
答案 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')