You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用vi包中的ex命令输出文件内容?

如何使用vi包中的ex命令输出文件内容?

我懂你这情况!同样是ex命令,朋友那边是vim的符号链接版本,用ex -s -c %p -c q /etc/hosts就能顺顺当当输出文件内容,结果你装的是Arch里原生vi包的ex,跑同样的命令啥反应都没有,属实有点闹心。

这核心问题是原生vi的ex和vim的ex是完全不同的实现,语法细节差得不少:原生ex对静默模式下的输出控制更严格,%p这种打印缓冲区的命令在-s(静默)模式下不会主动把内容输出到标准输出,自然就看不到结果了。

给你两个实用的解决方法,选哪个看你需求:

方法一:用ex的重定向命令直接输出(推荐)

原生ex里可以用w !cat命令把缓冲区内容通过cat输出到终端,配合静默模式就能干净输出文件内容:

ex -s -c 'w !cat' -c q /etc/hosts

拆解下这个命令的逻辑:

  • -s:开启静默模式,避免输出ex的启动提示、文件状态这些冗余信息
  • -c 'w !cat':执行ex内置命令,把当前打开的文件缓冲区内容“写”到cat命令的标准输入,cat会直接把内容打印出来
  • -c q:执行完打印操作后自动退出ex,不用手动输入:q

方法二:打印指定行范围(需过滤冗余信息)

如果你更习惯用行范围打印的思路,也可以用1,$p表示“从第1行到最后一行全部打印”,但原生ex会额外输出文件状态提示,需要用grep过滤掉:

ex -c '1,$p' -c q /etc/hosts | grep -v '^"'

这个方法需要多一步过滤,不如方法一简洁,所以更推荐第一种。

额外小建议

如果你之后经常需要用vim风格的ex语法,也可以直接装vim包,这样系统里的ex会自动变成vim的符号链接,就能和朋友一样用原来的命令了:

sudo pacman -S vim

当然这是可选的,要是就想用原生vi的ex,方法一完全够用。

备注:内容来源于stack exchange,提问作者KamilCuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:18:19