如何在vim中过滤寄存器的内容?

0x8*_*x89 3 vim

我希望在将寄存器"+粘贴到缓冲区之前,通过外部命令过滤寄存器的内容(在我的情况下,剪贴板寄存器).

应该有一个VIM的解决方案:将外部命令的输出存储到寄存器中,但我似乎无法弄明白.

Luc*_*tte 5

system()是要走的路.:h system().

您可以使用旧时尚方式(一种可以完全控制的方式,因为您可以根据需要进行多次管道和重定向):

:let res = system("echo ".shellescape(@+)." | the-filter-command")
:put=res
Run Code Online (Sandbox Code Playgroud)

但是,你可能有行结束(最后一个字符需要将问题chomped).因此,第二个解决方案,其中vim使用临时文件并将其传递给过滤器程序:

:let res = system(the-filter-command, @+)
:put=res
Run Code Online (Sandbox Code Playgroud)

如果您使用另一个缓冲区,还有另一种方法可以实现此目的:

:new
:put=@+
:%!the-filter-command
:%d +
:bd
:put=@+
Run Code Online (Sandbox Code Playgroud)

最后注意:Vim已经有一些自己的过滤器:sort,uniq可能是原生的(但有点复杂),...