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

标签 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 复制/粘贴到新的终端窗口中可以得到所需的行为。

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

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

最佳答案

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 将以下参数传递给 vim:

0: vim
1: +'调用游标(1,3)'
2: README.md

该 shell 命令的 Perl 等价物是

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

关于bash - 如何在特定的行和列打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56301513/

相关文章:

bash - 自动创建证书 OpenVPN

linux - 使用区分大小写的名称重命名文件夹

linux - 从我的 bash 脚本调用另一个 bash 脚本,给它一些输入值

xml - LWP::UserAgent 用于 XML POST 到 HTTPS 服务器不工作

vim - gvim 中是否可以有垂直而不是水平的 GTK 选项卡?

vim - 用 less 或类似的东西在终端中分页的常规文本文件

linux - Ctrl + C 终止 "grunt watch",但杀死从同一个 bash 启动的 Atom 编辑器,为什么?

linux - Perl + 如何在文件中的单词前添加行

linux - vim 查找替换模式匹配反斜杠和字符串

perl - 有条件地连接到数据库