在Vim中将缓冲区管道缓冲到外部命令

yas*_*sar 83 vim external pipe

我是一个Vim新手.我想将当前缓冲区的内容发送到外部命令的stdin(比方说邮件).我的最终目的是设置一个快捷方式,以便从当前的Vim缓冲区快速发送电子邮件.我猜这应该是一个微不足道的东西,但我找不到一种方法将Vim缓冲区发送到外部命令.提前致谢.

Joh*_*ica 118

您可以使用:w !cmd将当前缓冲区写入外部命令的stdin.来自:help :w_c:

:[range] w [rite] [++ opt]!{cmd}

{cmd}使用[range]行作为标准输入执行(注意前面的空格'!'). {cmd}如下所示执行":!{cmd}",any '!'替换为上一个命令|:!|.

相关命令:%!cmd执行相同的操作,然后使用命令的输出替换当前缓冲区.因此,:%!sort将调用外部排序命令来对当前缓冲区进行排序.

  • 注意`:| sort`因此等同于`:%!sort` (10认同)
  • 这对格式化json非常有用:`:'<,'>!python -mjson.tool`或`:%!python -mjson.tool` (6认同)
  • 另一个很好的用途是格式化golang:`:%!gofmt%` (2认同)
  • 对于格式化 go,请使用 `:%!gofmt` 而不使用最后一个 `%`,因为这会导致它使用保存的版本(可能与当前缓冲区不同) (2认同)