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


92

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


提供有关STDINshell命令的选定文本的相关问题:管道连接到shell并在信息行上接收输出,
user1129682 2014年

Answers:


130

您可以:w !cmd用来将当前缓冲区写入外部命令的标准输入。来自:help :w_c

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

{cmd}[range]行作为标准输入执行(注意前面的空格'!')。 {cmd}与一样执行":!{cmd}",any '!'被之前的命令替换|:!|

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


6
这对于格式化json这样的格式很有用: :'<,'>!python -mjson.tool:%!python -mjson.tool
TrinitronX

1
对于格式化go,请使用:%!gofmt不带last的格式%,因为这将导致它使用保存的版本(可能与当前缓冲区有所不同)
thomasrutter

有什么方法可以在成功时才用命令输出替换当前缓冲区吗?如果命令返回非零值,是否不替换缓冲区?
thomasrutter

@thomasrutter如果缓冲器被替换为错误消息,而不是期望的输出,则只需按u用于撤消
törzsmókus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.