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

时间:2010-02-16 15:04:06

标签: vim

我想过滤寄存器的内容(在我的例子中,剪贴板寄存器"+)  在将其粘贴到缓冲区之前通过外部命令。

应该有VIM: store output of external command into a register的解决方案,但我似乎无法弄明白。

2 个答案:

答案 0 :(得分:5)

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

您可以使用旧式的方式(一种能够完全控制的方式,因为您可以随心所欲地管道和重定向):

:let res = system("echo ".shellescape(@+)." | the-filter-command")
:put=res

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

:let res = system(the-filter-command, @+)
:put=res

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

:new
:put=@+
:%!the-filter-command
:%d +
:bd
:put=@+

最后一点:Vim已经有一些自己的过滤器,如:sortuniq也是possible natively(但有点复杂),...

答案 1 :(得分:1)

:let @a = system("ls -l " . shellescape(@+))

似乎在这里工作。