管道输出命令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)有一个更简单的解决方案,那么我将如何将vim命令的输出传递给shell命令?
答
最简单的方法可能是“重定向”输出到一个VIM可变的,然后筛选它修改缓冲区:
function! GetModifiedBuffers()
redir => bufoutput
buffers " same as ls
redir END
return join(filter(split(bufoutput,'\n'),"v:val =~ '\\%8c+'"),'\n')
endfunction
然后像做:echo GetModifiedBuffers()
显示修改缓冲区的名单。
你想用这些修改过的文件做什么? – romainl 2012-01-14 22:23:14
@romainl我喜欢在退出之前查看哪些文件被修改,而不是盲目地发布':xa' – puk 2012-01-15 23:10:17