Quickfix列表,如何添加和删除条目

Tre*_*her 5 vim

在vim我通常使用quickfix列表作为todo列表的类型来修复错误或重构代码.但是我的工作流程有一些问题:

  • 如果我必须:cn多次跳转来比较代码的其他部分,那么查找最后编辑的条目:cp很困难.:cw有帮助,但在更大的清单上,它也变得困难.删除固定条目会很有帮助.
  • 在重构时,我偶尔会遇到一些我希望稍后返回的代码.使用全局标记是可以的,但将当前位置添加到quickfix列表会更有帮助.

所以我希望找到一个简单的命令:help quicktext来添加一个位置到quickfix列表或删除已经修复的条目.但我能找到的只是:cbuffer:caddb.但是在:cw我收到消息后编辑缓冲区时,它是不可修改的.帮助文本提供了以下解决方案(但我真的不想编写临时文件):

注意:在quickfix窗口中进行更改不会影响错误列表.'可修改'是为了避免进行更改.如果您仍然删除或插入行,则文本和错误号之间的关系会混乱.如果您真的想这样做,可以将quickfix窗口的内容写入文件并使用":cfile"将其解析并用作新的错误列表.

也许:cad有人可以添加当前行?还是有人在考虑其他工作流程?

rom*_*inl 7

在 quickfix 列表中添加和删除条目通常是用:help setqflist()和完成的:help getqflist()

您还有:help :caddexpr,其中包含一个看起来很像您要执行的操作的示例,但不幸的是没有对称的:cremoveexpr


既然我们已经这样做了,我的插件vim-qf可以让您过滤、保存、修改、组合和恢复快速修复列表,因此它可能对您有用。顺便说一下,从 qf/loc 列表中添加/删除任意项目听起来像是一个可能的功能......


dsi*_*ord 7

这是一种无需使用插件或定义函数即可实现相同目的的更短方法...

只需将其弹出到ftplugin/qf.vim. 对于 Neovim,将此文件放在~/.config/nvim/after/ftplugin/qf.vim.

此语法dd仅向 quickfix 文件类型添加键绑定。这将从列表中删除当前行。

例如,用于:cope打开一个 quickfix 缓冲区并dd在那里尝试。

nnoremap <buffer> <silent> dd
  \ <Cmd>call setqflist(filter(getqflist(), {idx -> idx != line('.') - 1}), 'r') <Bar> cc<CR>
Run Code Online (Sandbox Code Playgroud)

注意:相信<Cmd>地图仅在 Neovim 中可用,在这种情况下,:如果您在常规 vim中,您只需删除它并添加一个。


Ami*_*tin 5

我在特别寻找从快速修复列表中删除项目的能力时发现了您的问题。我不太擅长vimscript,因此可能有一个更优雅的解决方案,但这就是我想到的。

这将覆盖ddquickfix列表(由于modifiable已关闭,因此无论如何几乎没有用),以从quickfix列表中删除当前行(光标的当前行,而不是当前的quickfix项)。

我无法弄清楚如何以编程方式确定当前的quickfix项,这就是我决定使用的方式dd,以使其更明显地适用于光标所在的行。

我希望您会发现这很有用。

" When using `dd` in the quickfix list, remove the item from the quickfix list.
function! RemoveQFItem()
  let curqfidx = line('.') - 1
  let qfall = getqflist()
  call remove(qfall, curqfidx)
  call setqflist(qfall, 'r')
  execute curqfidx + 1 . "cfirst"
  :copen
endfunction
:command! RemoveQFItem :call RemoveQFItem()
" Use map <buffer> to only map dd in the quickfix window. Requires +localmap
autocmd FileType qf map <buffer> dd :RemoveQFItem<cr>
Run Code Online (Sandbox Code Playgroud)

更新:我已经修复了使用上述功能发现的一些问题。

  • 我更进一步,把它做成了一个插件。[给你](https://github.com/TamaMcGlinn/quickfixdd) (3认同)

Hot*_*hke 5

更新:新的官方vim插件cfilter

21.8.2018(补丁:8.1.0311)开始,插件cfilter$VIMRUNTIME本身已分发。它记录在下:h cfilter-plugin

必要时加载插件cfilter或始终将其加载到vimrc中

:packadd cfilter
Run Code Online (Sandbox Code Playgroud)

筛选快速修复列表

:Cfilter DPUST
Run Code Online (Sandbox Code Playgroud)