如何在Vim的:term命令中实现shell输入重定向
问题根因
:term 命令默认会直接启动指定程序并传递参数,不会调用系统shell做预处理,因此shell语法中的输入重定向符 < 不会被识别,只会被当做普通参数传递给Python程序,无法触发从文件读取输入的逻辑,程序就会持续等待标准输入。
解决方案
方法1:显式调用shell执行命令
手动指定shell并将完整的带重定向的命令作为参数传入,shell会自动完成重定向逻辑:
- Linux/macOS 环境(以bash为例):
:term bash -c 'python3 myfile.py < input.txt' - Windows 环境(以cmd为例):
:term cmd /c "python3 myfile.py < input.txt"
方法2:使用 ++shell 参数(Vim 8.2及以上版本支持)
Vim 8.2 为 :term 新增了 ++shell 可选参数,添加后Vim会自动调用默认shell执行后续命令,无需手动写shell调用逻辑:
:term ++shell python3 myfile.py < input.txt
注意事项
如果你的脚本路径、输入文件路径包含空格或特殊字符,需要给对应路径加引号转义,避免shell解析出错,示例:
:term bash -c 'python3 "我的脚本.py" < "输入文件.txt"'
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

