我想过滤寄存器的内容(在我的例子中,剪贴板寄存器"+
)
在将其粘贴到缓冲区之前通过外部命令。
应该有VIM: store output of external command into a register的解决方案,但我似乎无法弄明白。
答案 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已经有一些自己的过滤器,如:sort
,uniq
也是possible natively(但有点复杂),...
答案 1 :(得分:1)
:let @a = system("ls -l " . shellescape(@+))
似乎在这里工作。