2012-01-14 258 views
2

要找到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

回答

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()顯示修改緩衝區的名單。