【发布时间】:2013-03-13 18:15:05
【问题描述】:
我正在尝试根据行本身的内容按字母顺序自动对 Quickfix 列表中的行进行排序(默认情况下,它按照它们在文件中出现的顺序进行排序)。我已将以下内容放在我的.vimrc 中,但出于某种原因,它会根据行号进行排序。据我所知,Quickfix 列表是一个字典列表,所以下面的Sortqfbytext 函数应该只按每个列表项的text 内容排序,而忽略其余部分(包括行号)。
function! s:Sortqfbytext(i1, i2)
let textlist = []
let textlist = [a:i1.text,a:i2.text]
call sort(textlist)
if textlist[0] == textlist[1]
return 0
elseif textlist[0] == a:i1.text
return 1
elseif textlist[0] == a:i2.text
return -1
endif
endfunction
function! s:Makesortedqflist()
let xlist = sort(getqflist(), 's:Sortqfbytext')
call setqflist(xlist)
endfunction
autocmd! QuickfixCmdPost * call s:Makesortedqflist()
【问题讨论】:
-
“Quickfix 列表”是什么意思?我真的不明白你在做什么。
-
快速修复列表是一个错误列表,其中包含指向它们所在位置的链接。例如,如果你输入 :vimgrep /readme/ & :copen 它将打开带有指向当前文件中所有“readme”实例的链接的快速修复窗口。但是,quickfix 窗口本身不能编辑,因为它会弄乱链接。因此,要对其进行排序,您必须创建一个新列表,编辑该列表,然后通过调用 setqflist(newlisthere) 设置新的 quickfix 列表。基本上,我试图弄清楚如何仅按字典中的一项(在本例中为“文本”项)按字母顺序对字典列表进行排序。
-
啊,这和 FIX 协议的 QuickFIX 引擎无关吧?以后请多加注意标签。
标签: list sorting vim dictionary