将Vim命令的输出管道输出到shell命令

时间:2012-01-14 19:48:49

标签: shell vim

要在Vim I中找到所有修改过的文件,请输入

:ls

这会给我一个像这样的列表

2  h   "index.html"                   line 98
3  h   "Category/Category.Bg_S.js"    line 1
4  h   "Category/Category.Box0_S.js"  line 1
5  +   "Category/Category.Box10_S.js" line 1
6      "Category/Category.Box11_S.js" line 1
7  +   "Category/Category.Box12_S.js" line 1

但如果缓冲区太多,这可能会很乏味。我想做的事情就像:

:ls !grep +

将vim的ls的内容传递给shell的grep函数。但它不起作用。因此,我有两个问题:

  1. 如何查找所有已修改文件的列表?
  2. 如果对1)有一个更简单的解决方案,那么无论出于什么原因,我如何将vim命令的输出传递给shell命令?

1 个答案:

答案 0 :(得分:2)

最简单的方法是将输出“重定向”到vim变量,然后将其过滤为修改后的缓冲区:

function! GetModifiedBuffers()
    redir => bufoutput
    buffers  " same as ls
    redir END
    return join(filter(split(bufoutput,'\n'),"v:val =~ '\\%8c+'"),'\n')
endfunction

然后执行:echo GetModifiedBuffers()之类的操作以显示修改后的缓冲区列表。