管道输出命令shell命令

问题描述:

要找到Vim的I型管道输出命令shell命令

: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的内容的外壳grep功能。但它不起作用。因此,我有2个问题:

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

你想用这些修改过的文件做什么? – romainl 2012-01-14 22:23:14

+0

@romainl我喜欢在退出之前查看哪些文件被修改,而不是盲目地发布':xa' – puk 2012-01-15 23:10:17

最简单的方法可能是“重定向”输出到一个VIM可变的,然后筛选它修改缓冲区:

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

然后像做:echo GetModifiedBuffers()显示修改缓冲区的名单。