我想要findstr /m background *.vim | gvim
findstr /m background *.vim | gvim
在gvim的单个实例中打开所有包含background
*.vim
文件 – 但是我无法使pipe道工作。
这与这个问题非常相似,但不是捕获stdin输出,而是希望GViM将输出视为要打开的文件列表 – 而在Windows系统上,xargs不能保证。 有任何想法吗?
我可以想到一些这样做的方法:
使用vimgrep:在运行gvim之后,输入:
:vimgrep /background/ **/*.vim
这将填充所有匹配的quickfix列表(可能多于一个文件),所以你可以使用诸如:copen
, :cw
, :cn
等来导航(参见:help quickfix
)
使用findstr
给你一个文件列表,然后让vim打开这些文件:
findstr /m background *.vim > list_of_files.txt gvim list_of_files.txt " In Gvim, read each file into the buffer list: :g/^/exe 'badd' getline('.') " Open the files in tabs: :bufdo tabedit %
这将加载每个文件,但也将保持打开的文件列表(你总是可以bunload它或其他)。
编辑 :
使用:tabedit
文件列表不起作用(我只测试:badd
)。 你可以通过使用badd然后使用bufdo(如上所述)或者通过做这样的事情(把它放在你的vimrc中):
command! -range=% OpenlistdFiles <line1>,<line2>call OpenlistdFiles() function! OpenlistdFiles() range let FileList = getline(a:firstline, a:lastline) for filename in FileList if filereadable(filename) exe 'tabedit' filename endif endfor endfunction
然后只需打开包含所有必需文件名的文件,然后输入:
:OpenlistdFiles
使用服务器功能和一些批处理脚本魔术(我不明白,因为我使用bash)
@echo off REM Welcome to the hideous world of Windows batch scripts findstr /m background *.vim > list_of_files.txt REM Run GVIM (may not be required) gvim REM Still in command prompt or .bat file here REM for each line in the file "list_of_files.txt", pass the line to OpenInTab for /f %%i in (list_of_files.txt) do call:OpenInTab %%i goto:eof :OpenInTab REM Open the file in a separate tab of an existing vim instance gvim --remote-tab %~1 goto:eof
Eeeurrgh。
如果是我,我会用“使用vim的内置的聪明”选项。 其实,事实并非如此:我会使用cygwin的bash脚本,只是使用bash,但是如果我想用本地工具来做,我会使用内置的巧妙方法。
打开PowerShell:
gvim $(findstr /m background *.vim)
在bash中:
grep -l background *.vim | xargs gvim
关键是xargs
。 它从标准输入中获取行并将它们作为命令行参数传递。 grep -l
只是用匹配打印文件名。
另一个想法是,如果你没有xargs
并且不能下载它们,那么你可以将行转换成vim命令( :edit filename
)并让vim执行它们,即打开所有的文件。 再次,在我的环境中,我有sed
:
grep -l background *.vim | sed 's/^/:edit /' > files vim -s files
即使你没有sed
,也可以用vi -e
( ed
)替换它。
其中任何一个都会为每个文件名打开一个单独的gvim
实例 – 如果只有一个文件名,但是对于多个文件名可以工作,那么特别有用,前提是您可以使用gvim的多个实例:
1)在for内找到
for /f "delims=" %f in ('findstr /m background *.vim') do gvim "%f"
2)管发现为
findstr /m background *.vim | for /f "delims=" %f in ('more') do gvim "%f"
3).bat文件创建一个名为gvim_stdin.bat
的文件,比如(2)中包含这一行,除了%符号加倍外:
for /f "delims=" %%f in ('more') do gvim "%%f"
然后运行:
findstr /m background *.vim | gvim_stdin