![运行 vim 脚本退出批处理文件吗?(Windows .BAT/.CMD)](https://linux22.com/image/1393064/%E8%BF%90%E8%A1%8C%20vim%20%E8%84%9A%E6%9C%AC%E9%80%80%E5%87%BA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F%EF%BC%88Windows%20.BAT%2F.CMD%EF%BC%89.png)
尝试使用批处理文件的一部分运行 vim 脚本
vim -u NONE -S dothis.vim
但令人费解的是,批处理文件在此行之后退出,而不是继续执行下一个语句。如果命令是内联的或作为子例程调用,就会发生这种情况。如果我创建另一个批处理文件来调用此命令,我的主批处理将继续执行,但屏幕上除了“请按任意键...”之外什么都不显示(实际文字可能略有不同,屏幕上不再可见),再也看不到批处理文件的执行(在这种情况下很重要)。
qa!
如果这与问题有关(文件已经被编辑过) ,dothis.vim 将退出update
;它会自动编辑子文件夹中的一堆文件。
答案1
正在运行的“vim”本身可能是一个 .bat 文件。无论如何,这是默认安装程序为您创建的。
当您直接从一个 .bat 文件使用另一个 .bat 文件时,第一个 .bat 文件不再运行,它会将控制权转移到第二个 .bat 文件,而不会返回。
因此这将结束你的 .bat 文件:
vim -u NONE -S dothis.vim
但这应该可行:
call vim -u NONE -S dothis.vim
现在,您说“如果命令是内联的或作为子例程调用,就会发生这种情况”。那么,您尝试过这个吗?因为这个 .bat 文件对我来说工作得很好:
@echo off
setlocal
echo starting Vim
call vim -u NONE -S dothis.vim
echo Vim done!
endlocal
echo on
当我调用这个.bat 文件时,我看到了预期的两个回显消息。
我查看了 C:\Windows\vim.bat 并确认没有exit
任何语句,如果操作不正确,可能会导致第一个 .bat 文件中出现问题。如果此方法不起作用,请尝试发布对您不起作用的完整 .bat 文件。正如我所说,上面的方法对我来说很好。省略call
只会运行第一个 echo 语句。