【问题标题】:Force vim to quit from editing list of files强制 vim 退出编辑文件列表
【发布时间】:2014-08-15 13:14:12
【问题描述】:

为了进行常见的修改,我通常使用以下方法编辑子目录中的所有文件:

for i in `ls`; do vim $i; done

现在,我想在命令提示符之间退出 VIM,但 VIM 不允许。在:quit 之后,它会打开下一个文件进行编辑。如何完全退出vim?

我认为一种解决方案可能是使用:!bash 从vim 输入shell 并执行killall vim,但这会杀死我也连接到其他终端的其他VIM 会话。有什么干净的方法可以做到这一点吗?

【问题讨论】:

  • 与答案无关,但你应该避免for i in $(any command without consistent output)。有关说明,请参阅 this

标签: bash shell vim for-loop vi


【解决方案1】:

那不是 Vim,那是 Bash。 Vim 无法阻止 Bash 循环的后续迭代生成一个新的、不相关的 Vim 实例。

不要循环执行此操作。只需调用 vim 的单个副本并将所有文件传递给它:

vim *

然后您可以随时使用:qa:quitall 停止编辑

【讨论】:

  • 在这种情况下,当我退出 VIM 时,它会显示 E173: 14 more files to edit
【解决方案2】:

建议将所有参数传递给 Vim(如 @meagar 的回答),由于多种原因解析 ls 的输出是不好的,但您仍然可以通过检查 Vim 来中止 for 循环中的迭代退出状态。

for i in `ls`; do vim $i || break; done

要中止 shell 循环,请通过 :cquit 而不是 :quit 退出当前 Vim 实例。这将使 Vim 退出状态为 1 而不是 0,从而中止循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2012-05-25
    • 2020-06-06
    • 1970-01-01
    • 2022-11-02
    • 2012-02-10
    相关资源
    最近更新 更多