强制vim退出编辑文件列表

时间:2014-06-25 05:26:30

标签: bash shell vim for-loop vi

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

vim *

然后,您可以随时使用:qa:quitall

停止编辑

答案 1 :(得分:2)

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

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

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