gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:43:09 28 4
gpt4 key购买 nike

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

这与 question 非常相似但我希望 GViM 不捕获 stdin 输出,而是将输出视为要打开的文件列表——在 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

呃呃呃。


如果是我,我会选择“使用 vim 的内置智能”选项。实际上,这不是真的:我会使用 cygwin 的 bash 脚本并只使用 bash,但如果我必须使用 native 工具来完成它,我会使用内置的聪明方法。

关于windows - 如何将输出重定向到 Gvim 作为要打开的文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com