当您发出 时:w !wc -w,vim 会创建一个临时文件,然后将该文件通过管道传送到 之后的命令!,或者更确切地说,它将您的数据放在一个临时文件中,并要求您的 shell 执行一个类似于以下内容的命令:
(wc -w) < /tmp/vHhjUPf/2
Run Code Online (Sandbox Code Playgroud)
最后一部分是 vim 将数据存储在其中的一些随机文件夹/文件名。需要注意的一件有趣的事情是,此命令将在不兼容的 shell 中失败,例如fish。这是因为 fish 使用(cmd)命令替换的语法而不是传统用法。
小智 3
要指定要传递给外部命令的数据范围,请键入:
:<range>w !<command>
Run Code Online (Sandbox Code Playgroud)
例如,
:1,5w !wc -w
Run Code Online (Sandbox Code Playgroud)
将计算第 1 行和第 5 行所包围的范围内的单词数。键入:h 10.3以获取有关范围的更多信息。
您还可以使用
:<range>!<command>
Run Code Online (Sandbox Code Playgroud)
将第 1 行到第 5 行的内容替换为命令的输出,这在使用外部命令过滤文本时非常有用。(例如用于排序。)键入:h !以获取有关过滤器的更多信息。
如果您希望运行外部命令而不让 Vim 将文本传递到其标准输入,请像这样运行命令::!command。