在vim中我通常使用quickfix列表作为todo列表来修复错误或重构代码。但是我的工作流程中存在一些问题:
:cn
向前跳转来比较代码的其他部分,则很难找到带有:cp
的最后编辑条目。 :cw
会有所帮助,但在更大的列表中,它也会变得困难。删除固定条目会很有帮助。所以我希望找到一个带:help quicktext
的简单命令,为quickfix列表添加一个位置或删除已经修复的条目。但我能找到的只有:cbuffer
或:caddb
。但是在:cw
之后编辑缓冲区我得到一条消息时,它是不可修改的。帮助文本提供了以下解决方案(但我真的不想编写临时文件):
注意:在quickfix窗口中进行更改不会影响列表 错误。 '修改'是为了避免做出改变。如果删除或插入 无论如何,文本和错误号之间的关系搞砸了。 如果你真的想这样做,你可以编写quickfix的内容 窗口到文件并使用":cfile"将其解析并用作新错误 列表。
也许使用:cad
可以添加当前行?或者有没有人考虑过替代工作流程?
答案 0 :(得分:4)
通常使用:help setqflist()
和:help getqflist()
在quickfix列表中添加和删除条目。
您还有:help :caddexpr
,其中包含的示例与您尝试的内容非常相似,但遗憾的是没有对称的:cremoveexpr
。
由于我们处于此状态,我的插件vim-qf可让您过滤,保存,修改,合并和恢复quickfix列表,以便可能对您有用。从qf / loc列表中添加/删除任意项目听起来像是一个可能的功能......
答案 1 :(得分:4)
我发现你的问题时特别注意从quickfix列表中删除项目的能力。我不擅长vimscript,所以可能是一个更优雅的解决方案,但这就是我想出来的。
这会覆盖quickfix列表中的dd
(因为modifiable
已关闭,因为dd
已关闭)以删除当前行(光标的当前行,而不是当前的quickfix项)来自quickfix列表。
我无法弄清楚如何以编程方式确定当前的quickfix项目,这是我决定使用" 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>
的方式,以使其更明显地应用于游标行。
我希望你会发现这很有用。
function scroll() {
var scrolldown = element.all(by.css(".className"));
browser.controlFlow().execute(function () {
browser.executeScript('arguments[0].scrollIntoView(true)',
scrolldown.getWebElement());
});
}
scroll();
更新:我已经修复了我在上述功能中发现的一些问题。
答案 2 :(得分:4)
自21.8.2018 (patch: 8.1.0311)起,插件 cfilter 本身就分布在$VIMRUNTIME
中。它记录在:h cfilter-plugin
下。
在需要时加载插件 cfilter 或始终将其加载到vimrc中
:packadd cfilter
使用...过滤快速修复列表
:Cfilter DPUST
答案 3 :(得分:1)
:set modifiable
或 :set ma
使缓冲区可修改,因此您可以将 dd
行排除在 quickfix 列表之外。
答案 4 :(得分:0)
这是无需使用插件或定义函数即可实现同一目的的一种较短方法。
只需将其弹出到ftplugin/qf.vim
nnoremap <buffer> <silent> dd
\ <Cmd>call setqflist(filter(getqflist(), {idx -> idx != line('.') - 1}), 'r') <Bar> cc<CR>
注意:我相信 <Cmd>
地图仅在Neovim中可用,在这种情况下,您只需将其删除并添加一个{{1} }(如果您使用的是常规vim。
答案 5 :(得分:0)
Vimscript 有一种类似于 Python 的方式来选择数组范围,因此您也可以使用 [n:n]
作为索引来选择当前的快速修复列表。
:call setqflist(getqflist()[1:])
...将从列表中删除第一项。
:call setqflist(getqflist()[:0])
...将删除最后一个。
您还可以使用 +
来连接数组,所以...
:call setqflist(getqflist()[1:] + getqflist()[:0])
...也能用!