为了进行常规修改,我通常使用以下方式编辑子目录中的所有文件:
for i in `ls`; do vim $i; done
现在,我想在命令提示符之间退出VIM,但VIM不允许我。在:quit
之后,它会打开下一个文件进行编辑。如何完全退出vim?
我认为一个解决方案可能是使用shell
从vim输入:!bash
并执行killall vim
但这会杀死我在其他终端中连接的其他VIM会话。有没有干净的方法来做到这一点?
答案 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,从而中止循环。