繁体   English   中英

如何将输出重定向到Gvim作为要打开的文件列表?

[英]How do I redirect output into Gvim as a list of files to be opened?

我想findstr /m background *.vim | gvim findstr /m background *.vim | gvim在单个gvim实例中打开包含background所有*.vim文件 - 但是我无法使管道工作。

这与此问题非常相似,但我不希望捕获stdin输出,而是希望GViM将输出视为要打开的文件列表 - 在Windows系统上,因此无法保证xargs。 有任何想法吗?

我可以想到几种方法:

使用vimgrep

使用vimgrep:运行gvim后,输入:

:vimgrep /background/ **/*.vim

这将使用所有匹配(每个文件可能多于一个)填充quickfix列表,因此您可以使用以下内容:copen:cw:cn等进行导航(请参阅:help quickfix


使用vim的内置聪明

使用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 %

这将加载每个文件,但也将保持文件列表打开(您可以随时加载它或其他)。

编辑

使用:tabedit在文件列表上不起作用(我只测试过:badd )。 您可以通过使用badd然后使用bufdo(如上所述)或通过执行此类操作(将其放入vimrc)来解决此问题:

command! -range=% OpenListedFiles <line1>,<line2>call OpenListedFiles()

function! OpenListedFiles() range
    let FileList = getline(a:firstline, a:lastline)
    for filename in FileList
        if filereadable(filename)
            exe 'tabedit' filename
        endif
    endfor
endfunction

然后只需打开包含所有必需文件名的文件,然后键入:

:OpenListedFiles

使用Vim的服务器功能和一些糟糕的批处理脚本

使用服务器功能和一些批处理脚本魔术(我使用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 -eed )替换它。

其中任何一个都会打开一个单独的gvim实例与每个文件名 - 如果只有一个文件名但对多个文件名有效,只要你可以使用多个gvim实例,这个实例特别有用:

1)在内部寻找

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM