加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Vim中使用quickfix列表搜索和替换

发布时间:2020-12-15 09:11:44 所属栏目:安全 来源:网络整理
导读:到目前为止,我总是使用EasyGrep替换多个文件中的文本。不幸的是,当项目变得更大时,它是相当缓慢。有一件事似乎是惊人的快速是Ggrep的fugitive.vim,只搜索我的版本控制文件。所有结果也存储在quickfix列表中。 如何使用Ggrep的结果做一个简单的替换所有这
到目前为止,我总是使用EasyGrep替换多个文件中的文本。不幸的是,当项目变得更大时,它是相当缓慢。有一件事似乎是惊人的快速是Ggrep的fugitive.vim,只搜索我的版本控制文件。所有结果也存储在quickfix列表中。

如何使用Ggrep的结果做一个简单的替换所有这些找到的文件?是不是有可能使用%s / foo / bar / cg在quickfix列表中的所有文件或有什么更好的方法?

Vim具有 bufdo,windo,tabdoargdo,它允许您在参数列表中所有打开的缓冲区,窗口或文件中执行相同的命令。我们真正需要的是quickfixdo,它会在quickfix列表中的每个文件上调用一个命令。遗憾的是,这种功能缺乏Vim,但 here’s a solution Al提供了一个自制的解决方案。使用这个,可以运行:
:QFDo %s/foo/bar/gc

这将对quickfix列表中的所有文件运行foo / bar替换。

bufdo,windo,tabdo和argdo命令有一些常见的行为。例如,如果当前文件不能被放弃,则所有这些命令将失败。我不知道上面引用的QFDo命令是否遵循相同的约定。

我改编了Al’s solution来创建一个名为Qargs的命令。运行此命令将使用quickfix列表中列出的所有文件填充参数列表:

command! -nargs=0 -bar Qargs execute 'args ' . QuickfixFilenames()
function! QuickfixFilenames()
  " Building a hash ensures we get each buffer only once
  let buffer_numbers = {}
  for quickfix_item in getqflist()
    let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])
  endfor
  return join(values(buffer_numbers))
endfunction

使用此,您可以按照以下步骤进行项目范围的搜索和替换:

:Ggrep findme
:Qargs
:argdo %s/findme/replacement/gc
:argdo update

编辑:(与彼得·林克的帽子提示)

或者,您可以在一行中一起加入最后3个命令:

:Ggrep findme
:Qargs | argdo %s/findme/replacement/gc | update

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读