【问题标题】:Why is `vim -E` always exiting with non-zero exit code when using here-doc?为什么使用 here-doc 时,`vim -E` 总是以非零退出代码退出?
【发布时间】:2019-08-08 21:23:43
【问题描述】:

在破折号中查看以下会话:

$ printf "foo\nbar\n" > testfile
$ cat testfile
foo
bar
$ vim -E testfile <<-EOS
> 1
> s/foo/baz/
> x
> EOS
$ echo $?
1
$ cat testfile
baz
bar
$ vim -E testfile +'1' +'s/baz/foo/' +'x'
$ echo $?
0
$

我使用 vi 的 ex 模式通过使用 here-document 将字符串 foo 与字符串 baz 交换。显然这行得通。但是 vim 仍然存在,退出代码为 1

然后我通过直接在命令行上将命令提供给 vim 再次将 bazfoo 交换。这也有效,并以0 的退出代码返回(如预期的那样)。

here-document 总是返回退出代码 1 的原因是什么?

即使我不编辑文件也会发生这种情况:

$ vim -E testfile <<-EOS
> 1
> p
> q
> EOS
foo
$ echo $?
1
$ 

那里发生了什么?

【问题讨论】:

  • 我的行为有些不同:使用-E,vim 总是以 1 退出,无论我是交互工作(vim -E testfile 并手动执行命令),还是使用命令行上的说明,还是使用一个异端。如果这是用于脚本,也许 sed 会是一个更安全的选择,或者 ex 因为你的命令已经在 ex 中?
  • 我使用 ex-mode,因为这涉及到一些“跳跃”,而这在 sed 的面向流的方法中是不可能的。在大多数系统上,ex 只是调用vim -e,所以不会有太大变化。 :-)
  • 我投票决定将此问题作为离题结束,因为它更适合vi.stackexchange.com,并且OP 有already crossposted it there

标签: shell vim posix heredoc ex


【解决方案1】:

我现在在vi.stackexchange.com 上问了同样的问题(这似乎更合适一些)并在那里得到了一个非常有用的答案:https://vi.stackexchange.com/a/19241/21417

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多