vim:执行shell命令而不进行过滤

sea*_*lea 33 vim shell

我想选择一个文本块(例如.V%)并使用该文本作为shell命令的输入(例如.wcpbcopy) - 但我不想改变当前的缓冲区 - 我只是想看看命令的输出(如果有的话)然后继续编辑而不做任何更改.

键入V%!wc将转换为:'<,'>!wc并切换wc命令输出的文本块.

如何在不影响当前缓冲区的情况下将一大块文本传递给任意shell命令?

pix*_*rth 84

选择您的文本块,然后键入以下键:w!sh

整个事情应该是这样的:

:'<,'>w !sh
Run Code Online (Sandbox Code Playgroud)

而已.我花了8年时间才学到这一点:)

注意:输入:选择文本后产生:'<,'>表示选择开始和结束的范围.

2016年更新:这只是通用的一个用途:

'<,'>w !cli_command
Run Code Online (Sandbox Code Playgroud)

这基本上允许您将文件的任意部分"发送"到外部命令,并在不改变缓冲区的情况下在临时vi窗口中查看结果.其他有用的例子是:

'<,'>w !wc
'<,'>w !to_file my_file
Run Code Online (Sandbox Code Playgroud)

老实说,我觉得改变当前缓冲区更有用.这种变化很简单:

'<,'>!wc
'<,'>!to_file my_file
Run Code Online (Sandbox Code Playgroud)

  • 令人敬畏,整洁和内在 - 所有人都希望. (2认同)