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

2024-03-20

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

这与此非常相似question https://stackoverflow.com/questions/856372/can-i-redirect-output-of-a-program-to-gvim但我不希望捕获 stdin 输出,而是希望 GViM 将输出视为要打开的文件列表 - 并且在 Windows 系统上,因此不能保证 xargs。有任何想法吗?


我可以想到几种方法来做到这一点:

使用 vimgrep

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

:vimgrep /background/ **/*.vim

这将使用所有匹配项填充快速修复列表(每个文件可能不止一个),因此您可以使用类似:copen, :cw, :cn等进行导航(请参阅:help quickfix)


使用 vim 的内置聪明才智

Use 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 %

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

Edit:

Using :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,但如果我必须使用本机工具来完成此操作,我会使用内置的聪明方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • CMD shell 中的可用空间

    有没有办法在 CMD 中获取磁盘或文件夹的可用磁盘空间量 无需安装一些第三方应用程序 我有一个 CMD 可以将一个大文件复制到给定目录 当然可以使用 复制命令返回错误级别 但我必须等待时间 需要复制文件 例如 然后磁盘已满并且复制操作失败
  • powershell 和 cmd 之间的文件大小不同[重复]

    这个问题在这里已经有答案了 我正在使用一点processconf js工具来构建configuration json来自多个文件 json files 这是我正在使用的命令 node processconf js file1 json fi
  • 将.exe文件嵌入到C++程序中?

    我编写了一个 C 程序 我想在其中执行第二个程序 这是一个 exe 文件 问题是我想将我的程序作为一个文件共享给其他人 当我在互联网上搜索时 我找到了这个解决方案 只需将第二个 exe 文件作为二进制资源存储在主文件中 exe 在编译时使用
  • 通过列表字符仅显示前导空格的“空格”字符

    Vim 中是否可以有我的编辑器 编辑时 c and h文件 显示通过listchars 一个特殊字符 仅用于leading空格字符 我发现一个单独的帖子指出 从版本 7 4 开始 Vim 现在支持通过以下方式突出显示所有空格字符listch
  • 将JAVA程序作为计划任务运行

    我试图在 Windows 7 机器上每天运行一次简单的 JAVA 程序 我的代码在 NetBeans 中运行良好 如果我进行清理并构建 它会表明 C Program Files Java jdk1 7 0 bin java jar C Us
  • 使用加密 API 导入 DER 编码的公钥

    是否可以使用 MS crypto API 导入 DER 编码的公钥 那么我可以验证签名吗 我需要 MS Crypto API 的一段代码或帮助来导入 DER 编码的公钥 证书 以下三个步骤将允许您导入公钥证书 使用获取证书上下文证书创建证书
  • 如何中断一个花费太多时间的 Vim 命令?

    有时 Vim 命令需要花费太多时间来执行 典型示例 gf通过网络发送具有巨大路径的命令 最多可能需要 30 秒才能结束 我想在执行过程中中断它 有没有办法取消命令执行并返回到正常模式 无需杀死 Vim 并重新启动 您可以中断它发送 SIGI
  • 为什么tcl/tkinter只支持BMP字符?

    我正在尝试在基于 tkinter 和 tcl 构建的 gui 中查询和显示 utf 8 编码字符 但是 我发现 tkinter 无法显示 4 字节字符 即大于 U FFFF 的 unicode 代码点 为什么会这样呢 实现非 BMP 字符对
  • 用于打开大(巨型、巨大、大)文本文件的文本编辑器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 在 Vim 中撤消光标移动

    假设我的光标位于下面的代码中 internal static SingleSelectList
  • 在 Docker 中启动 tomcat 时无法在端口 8080 上打开网页

    在我的本地计算机 Windows 10 64 位 上 我启动 docker Toolbox 然后我拉取 Tomcat 映像并运行它 如下所示 docker run it tomcat 就跑成功了 31 Dec 2019 17 54 27 5
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 如何在 PowerShell 中键入 TAB 字符?

    Task 默认情况下 在 Windows 命令提示符中按 TAB 键将输出文件名 而在 PowerShell 中则不会执行任何操作 我希望能够在交互模式下键入 TAB 字符 而不是通过脚本 Research 我在这个网站上和通过谷歌搜索发现
  • 在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)

    我现在真的很沮丧 我有一个现有的 hg 存储库 其中有几个月的编码历史 我想将其放入私有 Github 存储库中 以便我可以从那里对其进行处理 不幸的是我使用的是 Windows 我似乎找不到any转换我实际上可以正常工作的存储库的方法 实
  • 在 Windows 2008 上将 myprogram.exe 作为服务运行时出现问题

    MyProgram exe 是用来侦听来自管道的请求并使用命令提示符使其工作完美 但我尝试使用 Windows 服务来工作但没有成功我在 Windows Server 2008 Enterprise 上尝试了以下步骤 gt sc creat
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告

随机推荐